R 分组时指定变量名

R 分组时指定变量名,r,dplyr,tidyeval,nse,R,Dplyr,Tidyeval,Nse,我正在使用dplyrv1.0.2来操纵tibbles。我想使用group_by(),使用函数或正则表达式指定相关变量名(…参数)。我找到的唯一解决办法就是笨重。有没有一个相对简单的方法 下面是一个演示问题的简单示例: library(dplyr) data(iris) iris[, -(rbinom(1, 1, .5) + 1) ] %>% # randomly drop "Sepal.Length" or "Sepal.Width" grou

我正在使用dplyrv1.0.2来操纵tibbles。我想使用
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.Length”或“Sepal.Width”。最后一行中的
group\u by()
命令不起作用:它可以预料地返回一个
matches(),必须在*selecting*函数中使用
error消息

相比之下,此代码可以工作,但有点笨重:

iris[, -(rbinom(1, 1, .5) + 1) ]  %>%
  group_by(!!as.name(grep('Sepal', colnames(.), val = TRUE)))

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

使用跨
来选择列怎么样

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

#一个tible:150 x 4
#群:萼片长[35]
萼片。长花瓣。长花瓣。宽种
1 5.1 1.4 0.2刚毛
2 4.9 1.4 0.2刚毛
3 4.7 1.3 0.2刚毛
4.6 1.5 0.2刚毛
5 1.4 0.2刚毛
6.5.4 1.7 0.4刚毛
7.4.6 1.4 0.3刚毛
8.5 1.5 0.2刚毛
9 4.4 1.4 0.2刚毛
10 4.9 1.5 0.1刚毛
#…还有140行

谢谢。我没有意识到,
cross()
也可以轻松地使用像
grep()
这样的普通函数,但它确实做到了:
iris[,-(rbinom(1,1,5)+1)]%>%groupby(cross(grep(“^Sepal',,val=TRUE))
产生了相同的结果。这仍然没有我想要的那么清晰,但这是朝着正确方向迈出的一步。@user697473当你说“不像我想要的那么清晰”时,你到底想要什么?不需要三个右括号的东西。理想情况下,
groupby()
中只有一个函数,而不是嵌套在另一个函数中的一个函数。我怀疑这是可能的,但也许我错了。
# 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