我从已发表的论文中找到了以下代码。在这种特定情况下,我想说的是策略很有效,因为它很明显,并且变量相对较少。但是,代码是“有点”重复的,我想知道是否有一种不太重复的方式可以做到,它仍然符合dplyr
的风格和生活方式。
一个测试用例:
set.seed(42)
df <- data.frame(GR=sample(1:2, 100, replace=TRUE),
as.data.frame(replicate(20, rnorm(100))))
names(df)[-1] <- LETTERS[1:20]
现在使用
aggregate
进行分组的均值表:aggregate(df[,-1], df[1],mean)
...并使用
dplyr
:df %>% group_by(GR) %>% summarize(mean.A=mean(A),
mean.B=mean(B),
mean.C=mean(C),
mean.D=mean(D),
mean.E=mean(E),
# skipped 14 rows
mean.T=mean(T))
在
dplyr
中是否有DRY做到这一点的方法?我知道R中的所有编程工具也都可以在dplyr
中使用-因此,问题不在于如何实现..而是我正在寻找一种惯用的dplyr
方法。我在现实生活中见过类似但更长的例子。 最佳答案
当summarise
有多个列时,请使用summarise_all
(如果所有其他列都需要使用分组变量以外的函数进行汇总)
df %>%
group_by(GR) %>%
summarise_all(funs(mean = mean(., na.rm = TRUE)))
如果只需要在选定的列上执行此操作,请尝试使用
summarise_at
df %>%
group_by(GR) %>%
summarise_at(vars(A, B, C, D, E), funs(mean = mean(., na.rm = TRUE)))
另外,当我们只想在列的某些
summarise_if
上应用函数时,检查type
关于r - dplyr中的分组均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50530672/