2013-10-17 67 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