R dplyr : summarise complete cases by group for all variables

标签 r dplyr

我想使用 dplyr 按组汇总数据集中每个变量的变量。汇总的变量应以新名称存储。

一个例子:

df <- data.frame(
  group = c("A", "B", "A", "B"),
  a = c(1,1,NA,2),
  b = c(1,NA,1,1),
  c = c(1,1,2,NA),
  d = c(1,2,1,1)
)

df %>% group_by(group) %>% 
  mutate(complete_a = sum(complete.cases(a))) %>% 
  mutate(complete_b = sum(complete.cases(b))) %>%
  mutate(complete_c = sum(complete.cases(c))) %>% 
  mutate(complete_d = sum(complete.cases(d))) %>% 
  group_by(group, complete_a, complete_b, complete_c, complete_d) %>% summarise()

结果是我预期的输出:

# # A tibble: 2 x 5
# # Groups:   group, complete_a, complete_b, complete_c [?]
# group complete_a complete_b complete_c complete_d
# <fct>      <int>      <int>      <int>      <int>
# A              1          2          2          2
# B              2          1          1          2

如何生成相同的输出而不重复每个变量的 mutate 语句?

我尝试过:

df %>% group_by(group) %>% summarise_all(funs(sum(complete.cases(.))))

它可以工作,但不会重命名变量。

最佳答案

你就快到了。您必须使用rename_all

library(dplyr)

df %>% 
  group_by(group) %>% 
  summarise_all(funs(sum(complete.cases(.)))) %>% 
  rename_all(~paste0("complete_", colnames(df)))

# A tibble: 2 x 5
#  complete_group complete_a complete_b complete_c complete_d
#  <fct>               <int>      <int>      <int>      <int>
#1 A                       1          2          2          2
#2 B                       2          1          1          2

编辑

或者正如@symbolrush所指出的,更直接地没有colnames:

df %>% 
  group_by(group) %>% 
  summarise_all(funs(sum(complete.cases(.)))) %>% 
  rename_all(~paste0("complete_", .))

## A tibble: 2 x 5
#  complete_group complete_a complete_b complete_c complete_d
#  <fct>               <int>      <int>      <int>      <int>
#1 A                       1          2          2          2
#2 B                       2          1          1          2

关于R dplyr : summarise complete cases by group for all variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944072/

相关文章:

r - 将多个列表列组合成 R 中的一个列表列?

r - 与 mutate_at dplyr 相反

r - 使用 mutate_all 将所有列除以选定的列

r - dplyr:如何在函数内使用 group_by ?

r - 如何从R中的日期中提取月份

r - 从一台 Linux 服务器复制旧的 R 包并将它们安装在新服务器上

r - group_by() summarise() 和权重百分比 - R

r - 如何在 for 中使用 arrangement?

在 R 中重新编码任意分组变量或因子

r - 在 R 中对字符向量进行排序