我想从数据框中的多个列中计算汇总变量。键入所有行名时这是可能的,但是我想使用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()等来计算行均值,理想情况下不必拼出每个变量?
在您的select函数中使用函数starts_with:
df %>% mutate(A = rowMeans(select(., starts_with("A"))))
Run Code Online (Sandbox Code Playgroud)
如果您搜索帮助,select_helpers则会找到更多。
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |