我有一个数据框列表,我需要从中获取第二列的最后一行。所有数据帧具有不同的行数。我已经使用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 ==“worst”。我想避免循环,因此我要使用lapply,但是也许没有其他方法了?

最佳答案

我对该问题的理解是,您需要一个函数,该函数从数据帧的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)

关于r - 打印数据框列表的最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19433560/

10-12 17:59
查看更多