r - Group_by 表示 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 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
如何计算列 v1 到 v3 的每组 y 的平均值?
y v1 v2 v3
1 A v1_meanA v2_meanA v3_meanA
2 B v1_meanB v2_meanB v3_meanB
3 C v1_meanC v2_meanC v3_meanC
我想使用tidyverse::group_by(y)
但不确定如何通过summarise()
多个列。
解决方案
尝试这个:
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
推荐阅读
- python - 创建多个列表,放入另一个列表,然后排序
- java - 为什么 wait.until 在 selenium 中不起作用但 thread.sleep 起作用?
- c++ - 如何在 Visual Studio C++ 中更改调试控制台默认语言?
- python - re.search 在特定年份之后的字符串中的日期
- macos - macOS Mojave 上的 gcc 损坏
- php - 使用第一个数组作为键(但有重复项)组合两个数组,然后添加具有匹配重复项的第二个数组值
- javascript - 添加 EventListener JavaScript 时“无法读取属性 addEventListener of null”
- javascript - 不删除 dropzone.js 上的最后一个文件
- android - 将 R307 指纹扫描仪与 Android 集成
- python - 如何提高pandas中concat的速度