如何迭代R中的数据帧列表
我在R中有一个列表,其中包含几个数据帧。我想迭代数据帧并计算数据帧中某个值的最小/最大值。以下是我现在掌握的代码:如何迭代R中的数据帧列表,r,coding-style,dataframe,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]
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中有更规范的方法吗?您可以使用
lappy
从所有数据帧中提取xlab
列,然后unlist
组合成一个向量,然后取min
或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
xlab最大值(未列出(lappy(dats,[',xlab)))
[1] 3
如果我正确理解了这个问题,以下是与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
dats您能将数据帧列表中的数据帧组合成一个数据帧吗?我会使用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)))
库(plyr)
对于Q,df.orig+1。与其说代码太多,还不如说它完全不可读。为了理智起见,必须有更好的方法。你能提供一些示例数据吗?