尝试生成多个列表的平均值
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
我正在 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