首页 文章

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

提问于
浏览
7

我有一个数据框列表,我需要从中获取第二列的最后一行 . 所有数据帧都有不同的行数 . 我已经使用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 回答

  • 14

    怎么样...

    lapply(xyz, tail, 1)
    
  • 2

    我对这个问题的理解是你想要一个从 list 数据帧返回 data.frame 的第二列的函数,并带有一个可选参数 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)
    

相关问题