有data.frames列表,想要跨列表元素的意思

时间:2015-07-26 17:25:30

标签: r

我有一个data.frame的结构列表,如下所示:

mylist <- list(x=data.frame(group=1:3, x=c(43, 29, 49)),
               y=data.frame(group=1:3, x=c(29, 39, 11)),
               z=data.frame(group=1:3, x=c(20, 38, 98)))

因此每个data.frame都有两列。我想逐行得到这些data.frame的平均值。因此,第一个意思是(43+29+20)/3,第二个(29+39+38)/3和第三个(49+11+98)/3

2 个答案:

答案 0 :(得分:5)

尝试

 Reduce(`+`, mylist)/length(mylist)
 #  group        x
 #1     1 30.66667
 #2     2 35.33333
 #3     3 52.66667

或者

 library(data.table)
 rbindlist(mylist)[, list(x=mean(x)), group]
 #  group        x
 #1:     1 30.66667
 #2:     2 35.33333
 #3:     3 52.66667

或者

 library(tidyr)
 library(dplyr)
 unnest(mylist) %>%
          group_by(group) %>%
          summarise(x=mean(x))

基于OP的帖子中显示的输出

 (43+29+20)/3
 #[1] 30.66667

 (29+39+38)/3
 #[1] 35.33333

 (49+11+98)/3
 #[1] 52.66667

答案 1 :(得分:2)

dim

rowMeans(simplify2array(unlist(mylist, rec=F))[,c(F,T)])

或明确

rowMeans(`dim<-`(unlist(mylist), dim(mylist[[1]])*c(1, length(mylist)))[,c(F, T)])
# [1] 30.66667 35.33333 52.66667