打印数据框列表中的最后一行

时间:2013-10-17 17:40:46

标签: r lapply

我有一个数据框列表,我需要从中获取第二列的最后一行。所有数据帧都有不同的行数。我已经使用lapply编写代码,可以通过变量“num”提取任何行(对于超过数据帧行长度的数字返回NA),但是我想要包含一个变量num =“worst”,它将返回最后一行,第二列可用数据。这是用于检索“第n”行的代码(xyz是数据帧列表):

if(num=="best"){num=as.integer(1)} else
(num=as.integer())

rownumber<-lapply(xyz, "[", num, 2, drop=FALSE)

整天都在试图找到一个声明num ==“最差”的解决方案。我想避免循环,因此我使用lapply,但也许没有其他方法?

2 个答案:

答案 0 :(得分:14)

怎么样......

lapply(xyz, tail, 1)

答案 1 :(得分:2)

我对这个问题的理解是,你想要一个从data.frame数据帧返回list的第二列的函数,并带有一个允许你限制的可选参数worst到最后一次观察。

我认为最简单的方法是编写辅助函数,然后使用lapply将其应用到列表中。

我编写了一个selector函数,它接受一个行和列参数,以及一个worst参数。我认为这可以满足您的一切需求。

df1 <- data.frame(A = rnorm(10), B = rnorm(10), C = rnorm(10))
df2 <- data.frame(A = rnorm(10), B = rnorm(10), C = rnorm(10))
ldf <- list(df1, df2)

selector <- function(DF, col, row=NULL, worst=FALSE){
    if(!is.null(row)) return(DF[row, col])
    if(!missing("col")) if(col > ncol(DF)) return(NA)
    if(!is.null(row)) if(row > nrow(DF)) return(NA)
    if(worst) {
        tail(DF[,col, drop=F],1)
    } else {
        DF[row, col, drop=FALSE]
    }
}

lapply(ldf, selector, worst=T)