正如在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)(我已经阅读了一些教程),所以可能是因为我不知道要搜索的正确单词。
答案 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