dplyr group_by有大量变量

时间:2016-07-28 16:02:47

标签: r dplyr

有时会有一些具有相同分组的变量,特别是对某些变量执行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变量进行总结?

1 个答案:

答案 0 :(得分:2)

不像dplyr内置解决方案一样干净,我们仍然可以使用grepgroup_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_的矢量。