整齐的行均值来自列子集

sim*_*bus 4 row r tidyverse

我想从数据框中的多个列中计算汇总变量。键入所有行名时这是可能的,但是我想使用starts_with()和类似的函数。即

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))
Run Code Online (Sandbox Code Playgroud)

什么有效:

library(tidyverse)
df %>% mutate(A = (A1 + A2 + A3)/3)
df %>% mutate(A = rowMeans(select(., A1:A3)))
Run Code Online (Sandbox Code Playgroud)

但是,前者在汇总许多变量时会很烦人,而后者在汇总许多行时会很快变得非常慢。我怀疑必须有一个更快的解决方案。

什么不起作用:

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")))
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:是否有一种方法可以在mutate()中使用mean()等来计算行均值,理想情况下不必拼出每个变量?

ric*_*rks 5

在您的select函数中使用函数starts_with

df %>% mutate(A = rowMeans(select(., starts_with("A"))))
Run Code Online (Sandbox Code Playgroud)

如果您搜索帮助,select_helpers则会找到更多。