【问题标题】:summarise and then summarise_at in one dplyr chain?总结然后 summarise_at 在一个 dplyr 链中?
【发布时间】: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 %&gt;% group_by(carb) %&gt;% mutate(cnt = n()) %&gt;% group_by(cnt, add = TRUE) %&gt;% summarise_at(.vars = nums, funs(mean, sum))
  • @akrun nums 是nums &lt;- c("mpg", "disp", "cyl")。您的代码块看起来正确,除了它不是按新创建的 var cnt (group_by(cnt, add = TRUE)) 分组吗?我只想将分组变量保留在 carb 上,然后返回每个 carb 中 obs 的计数,以及 nums 中变量的总和和平均值
  • 在那种情况下mtcars %&gt;% group_by(carb) %&gt;% summarise(cnt = n()) %&gt;% cbind(., summarise_at(mtcars, .vars = nums, funs(mean, sum)))
  • 谢谢@akrun

标签: r dplyr


【解决方案1】:

我们可以mutate通过'carb'创建'cn't,然后在summarise_at之前添加'cnt'作为分组变量

mtcars %>% 
   group_by(carb) %>% 
   mutate(cnt = n()) %>%
   group_by(cnt, add = TRUE) %>% 
   summarise_at(.vars = nums, funs(mean, sum))

【讨论】:

  • 实际上,现在我正在查看数据,每次观察的所有汇总数据都是相同的。 mtnums &lt;- c("mpg", "disp", "cyl") mtcars %&gt;% group_by(carb) %&gt;% summarise(cnt = n()) %&gt;% cbind(mtcars %&gt;% group_by(carb) %&gt;% summarise_at(mtcars, .vars = mtnums, funs(mean, sum))) 我尝试将最后一行编辑为 cbind(mtcars %&gt;% group_by(carb) %&gt;% summarise_at(mtcars, .vars = mtnums, funs(mean, sum))),这给出了错误“错误:无法创建对不可调用对象的调用”
  • @DougFir 根据您的评论,我认为您需要更新的解决方案
  • 有趣。不过,我们是在 carb 还是 cnt 上分组?目标是仅对碳水化合物功能进行分组,但通过阅读本文很难判断。 add = T 在做什么?
  • @DougFir 它按“carb”和“cnt”分组,但“cnt”并不重要,因为我们已经有了通过使用mutate 创建列来复制的值。 add=TRUE 意味着将“cnt”也添加为分组变量。
  • 啊它现在点击了。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2015-10-06
相关资源
最近更新 更多