【问题标题】:dplyr summarise and then summarise_at in the same pipedplyr summarise 然后 summarise_at 在同一个管道中
【发布时间】:2020-12-16 18:11:46
【问题描述】:

这个问题之前已经提出过,有一些解决方案,但我找不到针对这个特定案例的解决方案。例如

my_diamonds <- diamonds %>% 
  mutate(blah_var1 = rnorm(n()),
         blah_var2 = rnorm(n()),
         blah_var3 = rnorm(n()),
         blah_var4 = rnorm(n()),
         blah_var5 = rnorm(n()))

my_diamonds %>% 
  group_by(cut) %>% 
  summarise(MaxClarity = max(clarity),
            MinTable = min(table), .groups = 'drop') %>% 
  summarise_at(vars(contains('blah')), mean)

想要一个新的 df,显示每个 blah 变量的最大清晰度、最小表和平均值。上面返回了一个空的小标题。根据我尝试使用 mutate 的其他一些 SO 帖子,然后总结如下:

my_diamonds %>% 
  group_by(cut) %>% 
  mutate(MaxClarity = max(clarity),
            MinTable = min(table)) %>% 
  summarise_at(vars(contains('blah')), mean)

这会返回一个小标题,但仅针对 blah 变量,缺少 MaxClarity 和 MinTable。

有没有办法在同一个 dplyr 链中结合 summarise 和 summarise_at?

【问题讨论】:

  • 大坝,对不起,给我一秒钟

标签: r dplyr


【解决方案1】:

summarise 的一个问题是,在第一次调用 summarise 之后,我们只得到分组中的列,即“剪切”以及汇总列,即“MaxClarity”和“MinTable”。另外,在第一个summarise步骤之后,用groups = 'drop'去掉分组

library(dplyr) # version >= 1.0
my_diamonds %>% 
  group_by(cut) %>% 
  summarise(MaxClarity = max(clarity),
            MinTable = min(table),
            across(contains('blah'), mean, na.rm = TRUE), .groups = 'drop')

【讨论】:

  • 漂亮,从来不知道对面。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 2018-02-03
相关资源
最近更新 更多