如何访问列表中所有数据框的相同名称的列?

时间:2013-10-09 13:21:10

标签: r

正如在Stackoverflow中某处建议的那样,为了存储大量数据帧,我将它们放在一个列表中。现在,我如何访问该列表中所有数据帧的特定列(全部具有相同名称)(以查找最大值)?

list[1:25]["colname"]

给出NULL

list[[1:25]]["colname"]

给出 "Error in list[[1:25]] : recursive indexing failed at level 3"

虽然我可以用

获得一列
list[[1]]["colname"]

我也试过了c(),但没有用。

我尝试了几次搜索,但找不到任何相关内容。我不是一个真正的程序员,只需要进行研究。我正在学习R(使用Rstudio)(我已经阅读了一些教程),所以可能是因为我不知道要搜索的正确单词。

3 个答案:

答案 0 :(得分:1)

以下是使用sapply[[的一种可能方式。

data <- list(data.frame(a = 1:3, b = 4:6), 
             data.frame(a = 10:15, b = 40:45))

sapply(data, "[[", "b")
[[1]]
[1] 4 5 6

[[2]]
[1] 40 41 42 43 44 45

答案 1 :(得分:1)

如果x是您的列表,则Sepal.Length是您要对列表中的所有数据集取最大值的列:

x <- rep(list(iris),25)


max(unlist(lapply(x,function(df) max(df$Sepal.Length))))

如果您想要列表中每个数据集的最大值:

lapply(x,function(df) max(df$Sepal.Length))

答案 2 :(得分:0)

其中一个apply家庭功能可以解决问题。在这种情况下使用匿名函数对列表中的每个data.frame进行操作,以查找第一列的max值...

#  Make some reproducible data
set.seed(1)
ll <- replicate( 3 , as.data.frame( matrix( sample( 9 ) , 3 ) ) , simplify = FALSE )
#[[1]]
#  V1 V2 V3
#1  1  4  3
#2  9  8  5
#3  7  2  6

#[[2]]
#  V1 V2 V3
#1  4  8  5
#2  7  2  3
#3  6  9  1

#[[3]]
#  V1 V2 V3
#1  6  4  2
#2  3  9  5
#3  1  7  8

#  Get max value of each of the first columns - could use a quoted column name here
lapply( ll , function(x) max( x[ , 1 ] ) )
#[[1]]
#[1] 9

#[[2]]
#[1] 7

#[[3]]
#[1] 6