Dplyr - Mean for multiple columns (4 个回答)
2年前关闭。
我想从数据框中的多列计算汇总变量。这在输入所有行名称时是可能的,但我想使用 starts_with() 和类似的函数。 IE。
df <- data.frame(A1 = rnorm(100, 0, 1),
A2 = rnorm(100, 0, 1),
A3 = rnorm(100, 0, 1),
B1 = rnorm(100, 0, 1),
B2 = rnorm(100, 0, 1))
什么工作:
library(tidyverse)
df %>% mutate(A = (A1 + A2 + A3)/3)
df %>% mutate(A = rowMeans(select(., A1:A3)))
但是,前者在汇总许多变量时会很烦人,而后者在汇总许多行时会变得非常慢。我怀疑必须有一个更快的解决方案。
什么不起作用:
df %>% mutate(A = mean(A1:A3))
df %>% group_by(row_number()) %>% mutate(A = mean(A1:A3))
df %>% group_by(row_number()) %>% mutate(A = mean(starts_with("A")))
所以我的问题是:有没有办法在 mutate() 中使用 mean() 等来计算行均值,理想情况下不必拼出每个变量?
在我之前的版本中,我认为 rowMeans
是问题所在,但实际上减缓计算的是 select
的使用 - 最好坚持使用 grep
系列:
df %>% mutate(A = rowMeans(.[, grepl("^A", names(.))]))