我试图在此数据集中创建一个新变量,该变量是集群变量每个级别的权重总和(即集群 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.
您正在查找
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