【发布时间】:2018-10-17 16:02:28
【问题描述】:
我有一个集群数据的数据框,我按集群聚合以提供汇总数据。
我想根据集群计数 n() 创建一个新列,然后对 vars 列表进行均值和求和:
# works fine
nums <- c("mpg", "disp", "cyl")
mtcars %>% group_by(carb) %>% summarise(cnt = n())
看起来像这样:
# A tibble: 6 x 2
carb cnt
<dbl> <int>
1 1 7
2 2 10
3 3 3
4 4 10
5 6 1
6 8 1
# does not work, returns error message:
> Error in summarise_impl(.data, dots) : Evaluation error: object
> 'disp' not found. In addition: Warning message: In mean.default(mpg) :
> argument is not numeric or logical: returning NA
nums <- c("mpg", "disp", "cyl")
mtcars %>% group_by(carb) %>% summarise(cnt = n()) %>% summarise_at(.vars = nums,
funs(mean, sum))
目标是拥有上面的 tbl,但新列 cnt 是每组中的观察计数。
【问题讨论】:
-
nums列在summarise之后在哪里? -
你需要
mtcars %>% group_by(carb) %>% mutate(cnt = n()) %>% group_by(cnt, add = TRUE) %>% summarise_at(.vars = nums, funs(mean, sum)) -
@akrun nums 是
nums <- c("mpg", "disp", "cyl")。您的代码块看起来正确,除了它不是按新创建的 var cnt (group_by(cnt, add = TRUE)) 分组吗?我只想将分组变量保留在 carb 上,然后返回每个 carb 中 obs 的计数,以及 nums 中变量的总和和平均值 -
在那种情况下
mtcars %>% group_by(carb) %>% summarise(cnt = n()) %>% cbind(., summarise_at(mtcars, .vars = nums, funs(mean, sum))) -
谢谢@akrun