【发布时间】:2014-02-08 03:14:53
【问题描述】:
我正在尝试将我对 plyr 的理解转移到 dplyr,但我不知道如何按多列进行分组。
# make data with weird column names that can't be hard coded
data = data.frame(
asihckhdoydkhxiydfgfTgdsx = sample(LETTERS[1:3], 100, replace=TRUE),
a30mvxigxkghc5cdsvxvyv0ja = sample(LETTERS[1:3], 100, replace=TRUE),
value = rnorm(100)
)
# get the columns we want to average within
columns = names(data)[-3]
# plyr - works
ddply(data, columns, summarize, value=mean(value))
# dplyr - raises error
data %.%
group_by(columns) %.%
summarise(Value = mean(value))
#> Error in eval(expr, envir, enclos) : index out of bounds
将 plyr 示例转换为 dplyr-esque 语法我缺少什么?
2017 年编辑:Dplyr 已更新,因此可以使用更简单的解决方案。查看当前选择的答案。
【问题讨论】:
-
刚到这里,因为它是顶级谷歌。您可以使用
group_by_现在在vignette("nse")中解释 -
@kungfujam:这似乎只按第一列分组,而不是按列对
-
您需要使用
.dots。这是改编自@hadley 下面的答案的解决方案:df %>% group_by_(.dots=list(quote(asihckhdoydk), quote(a30mvxigxkgh))) %>% summarise(n = n()) -
已将完整代码放在下面的答案中
-
正如有人在评论的回答中指出的那样,目的是不需要硬编码的列名。