【问题标题】:aggregate on more than one variable at a time using loop and/or apply in R使用循环一次聚合多个变量和/或在 R 中应用
【发布时间】: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)

标签: r loops apply


【解决方案1】:

还没有测试过,但这应该可以循环:

cols<-c("P1","P2","P3","P4")
dat2<-lapply(data[cols],function(x){
  aggregate(x~ID+t, data, mean, na.rm=T)
})

【讨论】:

    【解决方案2】:

    您可以使用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
    >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多