[英]aggregate on more than one variable at a time using loop and/or apply in R
我正在使用如下所示的数据帧( data
)上的编程语言R:
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汇总来自P1,P2,P3,P4的每个变量的ID(t始终等于0),如下所示:
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)
问题:是否存在我可以运行的循环或apply系列的某些代码,而不是手动检查每个变量(P1-P4)。 非常感谢!
尚未测试过,但这应该可以完成循环:
cols<-c("P1","P2","P3","P4")
dat2<-lapply(data[cols],function(x){
aggregate(x~ID+t, data, mean, na.rm=T)
})
您可以使用cbind(P1, P2, P3, P4) ~ ID + t
一次聚合多个变量,或者等效地使用点代替cbind(P1, P2, P3, P4)
。 点表示每个剩余变量。
> aggregate(. ~ ID + t, old.data, mean,na.rm=T)
ID t P1 P2 P3 P4
1 100003 0 5.5 3.0 2.0 2.5
2 100013 0 5.0 5.0 5.5 2.0
3 100014 0 1.0 1.0 1.0 1.0
4 100015 0 6.0 6.0 1.0 1.0
5 100044 0 6.0 2.5 3.0 1.0
6 100051 0 4.0 4.0 2.0 2.0
7 100074 0 4.5 6.0 3.5 2.5
8 100075 0 2.0 2.0 1.0 1.0
>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.