开发者

How to iterate over a list of data-frames in R

开发者 https://www.devze.com 2023-02-11 22:51 出处:网络
I have a list in R that contains several data frames. I want to iterate over the data frames and calculate the min/max of a value from the data frame. Here\'s the code that I have right now:

I have a list in R that contains several data frames. I want to iterate over the data frames and calculate the min/max of a value from the data frame. Here's the code that I have right now:

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]) )
} 

This seems ugly to me, as it requires a lot of code to do something very simple. Is there a more canonical way to do this in R?


You can use lapply to extract the xlab column out of all the data-frames, and unlist to combine into one vector, then take the min or max:

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

>  min( unlist( lapply( dats, '[', xlab ) ) )
[1] 1
>  max( unlist( lapply( dats, '[', xlab ) ) )
[1] 3


Can you combine the data frames from the list of data frames into one data frame? I would use the plyr package and rbind.fill, which would allow the data frames to have mismatched columns as long as the column of interest is named the same in all data frames.

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)))


If I understand the question correctly, heres something to do with 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

Gives per variable the minimum and maximum collapsed over all data frames in the list.

EDIT: shortened the code abit. I do assume that each dataframe contains the same number of columns in the same order.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号