如何使用聚合和创建一个正确的 df 大小的新变量

问题描述 投票:0回答:1

我试图在此数据集中创建一个新变量,该变量是集群变量每个级别的权重总和(即集群 1、集群 2 等中的权重总和)我收到此错误,即weight_total大小必须为 8 或 1...并且新变量大小与数据帧大小不匹配(4 与 8)。我该如何修改以创建大小为 8 的新变量?

data.test <- data.frame(cluster = c(1, 1, 2, 2, 3, 3, 4, 4),
         weight = c(240, 240, 300, 300, 500, 500, 250, 250))


data.test <- data.test %>% mutate(weight_total = (aggregate(weight~cluster, data.test, FUN = sum)))

Caused by error:
! `weight_total` must be size 8 or 1, not 4.
r aggregate
1个回答
0
投票

您正在查找

group_by
cluster
变量,然后添加一个变量,该变量是
sum
weights

library(dplyr)

data.test %>%
  group_by(cluster) %>%
  mutate(weight_total = sum(weight))
#> # A tibble: 8 × 3
#> # Groups:   cluster [4]
#>   cluster weight weight_total
#>     <dbl>  <dbl>        <dbl>
#> 1       1    240          480
#> 2       1    240          480
#> 3       2    300          600
#> 4       2    300          600
#> 5       3    500         1000
#> 6       3    500         1000
#> 7       4    250          500
#> 8       4    250          500

作为演示,从

dplyr 1.1.0
开始,您还可以在
mutate
操作中进行分组。

data.test %>%
  mutate(weight_total = sum(weight), .by = cluster)
#>   cluster weight weight_total
#> 1       1    240          480
#> 2       1    240          480
#> 3       2    300          600
#> 4       2    300          600
#> 5       3    500         1000
#> 6       3    500         1000
#> 7       4    250          500
#> 8       4    250          500

最后,如果您尝试创建一个新的数据框来表示每个簇的总权重,您需要

summarize

data.test %>%
  summarize(weight_total = sum(weight),
            .by = cluster)
#>   cluster weight_total
#> 1       1          480
#> 2       2          600
#> 3       3         1000
#> 4       4          500
© www.soinside.com 2019 - 2024. All rights reserved.