我有一个包含160个数据帧的列表,它们都具有相同的结构。每个数据框对应一个国家/地区
Afghanistan <- data.frame(seq(1970, 2010, 10), c(20,30,30,40,10))
Albania <- data.frame(seq(1970, 2010, 10), c(10, 40, NA, 50, 20))
colnames(Afghanistan) <- (c("Year", "Value"))
colnames(Albania) <- (c("Year", "Value"))
List1 <- list(Afghanistan, Albania)
每个Dataframe的结构如下所示:
Year Value
1970 20
1980 30
1990 30
2000 40
2010 10
如何获取列表中每个数据框的“值”列的平均值。我试图使用lapply函数,但我无法弄清楚如何正确地执行它。这不起作用:
lapply(List1[[]][,2], mean, na.rm = T)
或者将所有数据帧合并为一个大型数据帧然后使用聚合来获取每个国家/地区的平均值会更好吗?
答案 0 :(得分:1)
如果您有这样的列表:
my_list <- list(data.frame(year = c(2000:2003),
value = c(1:4)),
data.frame(year = c(2000:2003),
value = c(5:8)))
您可以使用lapply()
循环浏览该列表。每个x
都是data.frame
,您可以使用$
访问列:
lapply(my_list, function(x) {
mean(x$value)
})
这将返回
[[1]]
[1] 2.5
[[2]]
[1] 6.5
编辑后更新:
lapply(List1, function(x) {
mean(x$Value, na.rm = TRUE)
})
返回:
[[1]]
[1] 26
[[2]]
[1] 30