【问题标题】:Print the last row from a list of data frames打印数据框列表的最后一行
【发布时间】:2013-10-26 08:19:24
【问题描述】:

我有一个数据框列表,我需要从中获取第二列的最后一行。所有数据框都有不同的行数。我已经使用 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,但也许没有其他方法?

【问题讨论】:

  • tail 函数与lapply 一起使用。 tail 有一个 n 参数。

标签: r lapply


【解决方案1】:

怎么样...

lapply(xyz, tail, 1)

【讨论】:

  • @Jiber,我认为这不能回答实际问题——OP 需要帮助编写一个选择行和列组合的函数,并带有一个返回最后一行的参数 worst
【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2013-03-30
    • 2012-10-14
    • 2014-03-24
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多