【问题标题】:how to aggregate mean for a list and create a new matrix如何汇总列表的平均值并创建新矩阵
【发布时间】:2018-03-28 07:48:14
【问题描述】:

我有一个 data.frames 列表,在对一些列进行分区后,我想通过所有方式获得一个新的 data.frame。示例如下:

a=data.frame(ID=1:100,WT=1:100)
b=data.frame(ID=101:205,WT=101:205)
c=data.frame(ID=1001:1010,WT=1001:1010)
d=list(a,b,c)
names(d)=c("P01","P02","P03")  

然后,我为每个数据框创建了两个额外的列

d2=lapply(d,transform,seq=seq_along(ID))  
d3=lapply(d2,transform,bin=cut(seq,20,1:20))

现在,我想获得与 bin 列相关的方法。下面的代码展示了我是如何只为一个参与者做到这一点的:

P01=aggregate(d3$P01$WT,list(d3$P01$bin),mean)  
P01$Participant="P01" 

新的“P01”data.frame 包含三列:称为 bin 的列,然后是 WT 列的均值,最后是参与者的名称。

我的问题是,如何使这个过程自动化,这样我就可以获得不仅 P01 还包括所有其他参与者(即 P02 和 P03)的均值数据框? 此数据框应包含三列和所有参与者的数据。

【问题讨论】:

    标签: r


    【解决方案1】:

    也许

    mylist <- sapply(names(d3), function(p){
      transform(aggregate(d3[[p]]$WT, list(d3[[p]]$bin), mean), Participant=p)
    }, simplify=FALSE)
    

    这给出了一个包含三个数据框P01P02P03 的列表。

    然后你可以连接成一个数据框:

    do.call(rbind, mylist)
    

    【讨论】:

    • 只是为了简化 - lapply(d3, function(x) aggregate(WT~bin, x, mean))
    猜你喜欢
    • 2013-03-29
    • 2022-01-24
    • 2021-03-16
    • 2018-03-16
    • 1970-01-01
    • 2013-01-04
    • 2016-07-04
    • 2018-03-24
    • 2018-09-23
    相关资源
    最近更新 更多