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