【发布时间】:2020-12-22 15:10:50
【问题描述】:
我正在使用 dplyr v1.0.2 来操作小标题。我想使用group_by(),使用函数或正则表达式来指定相关的变量名称(... 参数)。我发现的唯一解决方案是笨重的。有没有比较简单的方法?
这是一个演示问题的最小示例:
library(dplyr)
data(iris)
iris[, -(rbinom(1, 1, .5) + 1) ] %>% # randomly drop "Sepal.Length" or "Sepal.Width"
group_by(matches("^Sepal\\."))
在第三行中,我随机删除了两个“Sepal”列之一。在最后一行,我想按剩余的“Sepal”列进行分组。问题是我不知道它的名字:它可能是“Sepal.Length”或“Sepal.Width”。最后一行中的 group_by() 命令不起作用:它可以预见地返回 matches() must be used within a *selecting* function 错误消息。
相比之下,这段代码有效,但有点笨拙:
iris[, -(rbinom(1, 1, .5) + 1) ] %>%
group_by(!!as.name(grep('Sepal', colnames(.), val = TRUE)))
有没有更简单的方法在第二行进行分组?
【问题讨论】: