【发布时间】:2017-11-22 23:31:01
【问题描述】:
我正在使用编程语言 R 处理如下所示的数据框 (data):
ID t P1 P2 P3 P4
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 100003 0 5 4 3 2
2 100003 0 6 2 1 3
3 100013 0 6 5 7 3
4 100013 0 4 5 4 1
5 100014 0 1 1 1 1
6 100014 0 1 1 1 1
7 100015 0 6 6 1 1
8 100015 0 6 6 1 1
9 100044 0 6 2 5 1
10 100044 0 6 3 1 1
11 100051 0 NA NA NA NA
12 100051 0 4 4 2 2
13 100074 0 4 6 4 3
14 100074 0 5 6 3 2
15 100075 0 2 2 1 1
目标:我需要按 ID(t 始终等于 0)对 P1、P2、P3、P4 中的每个变量进行聚合,如下所示:
new_data<-aggregate(P1~ID+t,data,mean,na.rm=T)
new_data<-aggregate(P2~ID+t,data,mean,na.rm=T)
new_data<-aggregate(P3~ID+t,data,mean,na.rm=T)
new_data<-aggregate(P4~ID+t,data,mean,na.rm=T)
问题:我是否可以运行循环或应用系列中的一些代码,而不是手动遍历每个变量(P1-P4)。非常感谢!
【问题讨论】:
-
是的,你可以在你的 P 列上使用 tidyr::gather 然后 dplyr::group_by Id t 和 key 和 dplyr::summarize value with mean
-
@Sathish - you 可能有点过于复杂了 -
aggregate(. ~ ID + t, data=dat, FUN=mean, na.rm=TRUE, na.action=na.pass)