有时会有一些具有相同分组的变量,特别是对某些变量执行gather
的结果,例如:
x0 x1 x2 variable value
1 1 Male Green 1 0.1803306
2 1 Male Green 2 0.5619410
3 1 Male Green 3 0.9905186
4 2 Female Blue 1 0.1549419
5 2 Female Blue 2 0.6917326
6 2 Female Blue 3 0.6509738
在这种情况下,我想计算分组汇总统计量(比如group_by(x0) %>% summarize(sum(value))
),同时保留第一列给出的所有ID变量。一种方法是group_by(x0, x1, x2)
但是如果有大量的ID变量会变得有点混乱,而group_by似乎不能使用select
中的函数,所以我不能这样做group_by(starts_with("x"))
。如何在不进行单独输入每个变量名称的情况下干净地保留我的所有ID变量进行总结?
答案 0 :(得分:2)
不像dplyr
内置解决方案一样干净,我们仍然可以使用grep
和group_by_
函数进行一些工作,其中.dots
参数允许我们传递矢量作为名字的角色:
df %>%
group_by_(.dots = grep("^x", names(df), value = T)) %>%
summarize(s_value = sum(value))
# Source: local data frame [2 x 4]
# Groups: x0, x1 [?]
# x0 x1 x2 s_value
# <int> <fctr> <fctr> <dbl>
#1 1 Male Green 1.732790
#2 2 Female Blue 1.497648
grep("^x", ...)
的行为与starts_with
相同,只是我们需要手动传递数据框的名称并将value
参数指定为TRUE
以便它将返回x0, x1, x2
我们可以group_by_
的矢量。