【问题标题】:dplyr group_by a large number of variables [duplicate]dplyr group_by 大量变量[重复]
【发布时间】:2016-12-03 03:30:49
【问题描述】:

有时一个变量有许多具有相同分组的变量,特别是由于对某些变量执行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 变量,而无需单独输入每个变量名称?

【问题讨论】:

  • 请显示您想要的输出。没看懂
  • 哦,我想我明白你在说什么,在这种情况下,你真正的问题是你的数据存储得不好。尝试阅读 dplyr 作者关于“整洁数据”jstatsoft.org/article/view/v059i10 的建议

标签: r dplyr


【解决方案1】:

不像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_

【讨论】:

    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多