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