如何迭代R中的数据帧列表

时间:2011-02-19 20:05:42

标签: r coding-style dataframe

我在R中有一个包含多个数据框的列表。我想迭代数据帧并计算数据帧中值的最小值/最大值。这是我现在的代码:

firstname = names(dats)[1]
xlim = c( min( dats[[firstname]][,xlab] ), max( dats[[firstname]][,xlab] ) )
for ( name in names(dats) ) {
   xlim = c( min(xlim[1],dats[[name]][,xlab]), max(xlim[2],dats[[name]][,xlab]) )
} 

这对我来说似乎很难看,因为它需要很多代码来做一些非常简单的事情。在R中有更典型的方法吗?

3 个答案:

答案 0 :(得分:10)

您可以使用lapply从所有数据框中提取xlab列,并unlist合并为一个向量,然后使用min或{ {1}}:

max

答案 1 :(得分:3)

您可以将数据帧列表中的数据帧合并为一个数据帧吗?我会使用plyr包和rbind.fill,只要在所有数据帧中将感兴趣的列命名为相同列,就会允许数据帧具有不匹配的列。

library(plyr)
df.orig <- data.frame(one = rep(1:4, each = 4), two = 1:16)
df.list <- dlply(df.orig, "one")
df.new <- rbind.fill(df.list)
xlim <- with(df.new, c(min(two), max(two)))

答案 2 :(得分:1)

如果我正确理解了这个问题,那就是与plyr有关:

dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
              df2 = data.frame(a=sample(1:3), b = sample(11:13)))

library(plyr)

xlim <- adply(do.call("rbind",dats),2,function(x)c(min(x),max(x)))
    names(xlim)=c("xlab","min","max")

xlim
  xlab min max
1    a   1   3
2    b  11  13

为每个变量提供列表中所有数据框的最小和最大折叠。

编辑:缩短代码abit。我假设每个数据帧包含相同数量的列。