在group_by中使用列索引而不是名称

Joe*_*Joe 5 r dplyr

我想用dplyr总结一个数据帧,如下所示:

> test <-data.frame(ID = c("A", "A", "B", "B"), val = c(1:4))
> test %>% group_by(ID) %>% summarize(av = mean(val))
# A tibble: 2 x 2
      ID    av
  <fctr> <dbl>
1      A   1.5
2      B   3.5
Run Code Online (Sandbox Code Playgroud)

但是假设不是按名称"ID"列进行分组,而是按第一列分组,而不管其名称如何.有一个简单的方法吗?

我已经尝试了一些幼稚的方法(group_by(1),group_by(.[1]),group_by(., .[1]),group_by(names(.)[1])无济于事.我才刚刚开始使用tidyverse包,所以我可能会丢失一些东西明显.

这个问题非常相似,但它是关于变异的,我无法将其概括为我的问题.这个问题也类似,但接受的答案是使用不同的包,我试图坚持使用dplyr.

Ian*_*ell 14

您可以使用across以下版本的功能1.0.0

library(dplyr)
test %>% 
  group_by(across(1)) %>% 
  summarise(av = mean(val))
## A tibble: 2 x 2
#  ID       av
#  <fct> <dbl>
#1 A       1.5
#2 B       3.5
Run Code Online (Sandbox Code Playgroud)


Psi*_*dom 12

您可以使用其中一个范围变体(group_by_at):

test %>% group_by_at(1) %>% summarise(av = mean(val))

# A tibble: 2 x 2
#      ID    av
#  <fctr> <dbl>
#1      A   1.5
#2      B   3.5
Run Code Online (Sandbox Code Playgroud)