如何聚合列表的均值并创建一个新矩阵

时间:2018-03-28 07:48:14

标签: r

我有一个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)的数据框? 该数据框应具有三列和所有参与者的数据。

1 个答案:

答案 0 :(得分:0)

也许

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)