我有一个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
。
答案 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