R 分组时指定变量名
我正在使用dplyrv1.0.2来操纵tibbles。我想使用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
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