分组时指定变量名

问题描述

我使用 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[,.5) + 1) ]  %>%
  group_by(!!as.name(grep('Sepal',colnames(.),val = TRUE)))

有没有更简单的方法可以在第二行进行分组?

解决方法

如何使用 across 选择列

iris[,-(rbinom(1,1,.5) + 1) ]  %>%
  group_by(across(starts_with('Sepal')))

# A tibble: 150 x 4
# Groups:   Sepal.Length [35]
   Sepal.Length Petal.Length Petal.Width Species
          <dbl>        <dbl>       <dbl> <fct>  
 1          5.1          1.4         0.2 setosa 
 2          4.9          1.4         0.2 setosa 
 3          4.7          1.3         0.2 setosa 
 4          4.6          1.5         0.2 setosa 
 5          5            1.4         0.2 setosa 
 6          5.4          1.7         0.4 setosa 
 7          4.6          1.4         0.3 setosa 
 8          5            1.5         0.2 setosa 
 9          4.4          1.4         0.2 setosa 
10          4.9          1.5         0.1 setosa 
# … with 140 more rows

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...