R中多列的分组方式

R中多列的分组方式,r,R,假设我有一个数据帧: set.seed(123) dat<-data.frame(x=letters[1:9], y=rep(LETTERS[1:3], each=3), v1=rnorm(9,1,2), v2=rnorm(9,3,2), v3=rnorm(9,5,6)) dat x y v1 v2 v3 1

假设我有一个数据帧:

set.seed(123)
dat<-data.frame(x=letters[1:9], 
                y=rep(LETTERS[1:3], each=3), 
                v1=rnorm(9,1,2),
                v2=rnorm(9,3,2),
                v3=rnorm(9,5,6))
dat
  x y         v1         v2         v3
1 a A -0.1209513  2.1086761  9.2081354
2 b A  0.5396450  5.4481636  2.1632516
3 c A  4.1174166  3.7196277 -1.4069422
4 d B  1.1410168  3.8015429  3.6921505
5 e B  1.2585755  3.2213654 -1.1560267
6 f B  4.4301300  1.8883177  0.6266526
7 g C  1.9218324  6.5738263  1.2497644
8 h C -1.5301225  3.9957010 -5.1201599
9 i C -0.3737057 -0.9332343 10.0267223
我想使用
tidyverse::group_by(y)
,但不确定如何通过
summary()
进行多列操作。

试试这个:

library(dplyr)
set.seed(123)
dat<-data.frame(x=letters[1:9], 
  y=rep(LETTERS[1:3], each=3), 
  v1=rnorm(9,1,2),
  v2=rnorm(9,3,2),
  v3=rnorm(9,5,6))
#Code
dat %>% select(-x) %>% group_by(y) %>% summarise_all(.funs = mean,na.rm=T)

# A tibble: 3 x 4
  y          v1    v2    v3
  <fct>   <dbl> <dbl> <dbl>
1 A     1.51     3.76  3.32
2 B     2.28     2.97  1.05
3 C     0.00600  3.21  2.05
库(dplyr)
种子集(123)
dat%选择(-x)%%>%分组(y)%%>%汇总所有数据(.funs=平均值,na.rm=T)
#一个tibble:3x4
y v1 v2 v3
1 A 1.51 3.76 3.32
2 B 2.28 2.97 1.05
3 C 0.00600 3.21 2.05
使用和保存

want%
组别(y)%>%
总结(变量(v1、v2、v3)、平均值,na.rm=TRUE)

在dplyr 1.0.0中,使用了
summary_all()
summary_at()
语法。根据
小插曲(“colwise”)
,这似乎是首选方法:

库(dplyr)
dat%>%
组别(y)%>%
汇总(跨(v1:v3,平均值))
通缉犯%
组别(y)%>%
总结(平均值1=平均值(v1),平均值2=平均值(v2),平均值3=平均值(v3))
这有帮助吗?vars()文档表明它已被取代,所以我只是替换了它,但没有进行测试。谢谢你的帮助。
library(dplyr)
set.seed(123)
dat<-data.frame(x=letters[1:9], 
  y=rep(LETTERS[1:3], each=3), 
  v1=rnorm(9,1,2),
  v2=rnorm(9,3,2),
  v3=rnorm(9,5,6))
#Code
dat %>% select(-x) %>% group_by(y) %>% summarise_all(.funs = mean,na.rm=T)

# A tibble: 3 x 4
  y          v1    v2    v3
  <fct>   <dbl> <dbl> <dbl>
1 A     1.51     3.76  3.32
2 B     2.28     2.97  1.05
3 C     0.00600  3.21  2.05
want <- dat %>%
  group_by(y) %>%
  summarise_at(vars(v1, v2, v3), mean, na.rm = TRUE)
Wanted<- dat %>%
group_by(y)%>%
summarise(mean1=mean(v1), mean2 = mean(v2), mean3= mean(v3))