2013-10-17 31 views
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,但也许没有其他办法?

+0

在'lapply'中使用'tail'功能。 'tail'有一个'n'的参数。 – A5C1D2H2I1M1N2O1R2T1

回答

2

我这个问题的理解是,你希望它返回一个data.frame从dataframes的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) 
14

......怎么

lapply(xyz, tail, 1) 
+1

+1 :)当然:) – A5C1D2H2I1M1N2O1R2T1

+0

@Jiber,我不认为这回答了实际问题 - OP想要帮助编写一个函数,选择行和列组合,并使用返回最后一行的参数“worst”。 – ricardo