尝试生成多个列表的平均值

Trying to generate averages across multiple lists

我正在 for() 循环中填充列表。下面包含结果示例。

dta <- list(structure(c(128L, 175L), .Dim = 2L, .Dimnames = structure(list(
    c("0", "1")), .Names = ""), class = "table"), structure(c(132L, 
171L), .Dim = 2L, .Dimnames = structure(list(c("0", "1")), .Names = ""), class = "table"), 
    structure(c(130L, 173L), .Dim = 2L, .Dimnames = structure(list(
        c("0", "1")), .Names = ""), class = "table"), structure(c(133L, 
    170L), .Dim = 2L, .Dimnames = structure(list(c("0", "1")), .Names = ""), class = "table"))

每个列表显示给定数据集的 0 和 1 的数量。

> head(dta)
[[1]]

  0   1 
128 175 

[[2]]

  0   1 
132 171 

[[3]]

  0   1 
130 173 

[[4]]

  0   1 
133 170 

我习惯使用的lapply()函数在列表中运行(即求出给定列表中元素的总和)。在这里,我想要列表的平均值。模棱两可地,我想要每个列表中出现的 0 和 1 的平均数(即平均 0 我想要 128,132,130,133 的总和除以 4)。

如有任何建议,我们将不胜感激。

你可以试试

library(reshape2)
library(data.table)
setDT(melt(dta))[, mean(value), Var1]

或者

colMeans(do.call(rbind, dta))

您可以使用tapply()

u <- unlist(dta)
tapply(u, names(u), mean)
#      0      1 
# 130.75 172.25 

另一种方法:

sapply(split(unlist(dta), 0:1), mean)
#      0      1 
# 130.75 172.25 
colMeans(matrix(unlist(dta), ncol = 2, byrow = TRUE))
#[1] 130.75 172.25

或使用 dplyr & reshape2:

library(reshape2); library(dplyr)
melt(dta) %>% group_by(Var1) %>% summarise(mean = mean(value))
#Source: local data frame [2 x 2]
#
#  Var1   mean
#1    0 130.75
#2    1 172.25

这是使用 Reduce

的方法
Reduce(`+`, dta)/length(dta)
#      0      1 
# 130.75 172.25