2013-10-17 17 views
7

Ich habe eine Liste von Datenrahmen, die ich brauche, um die letzte Zeile der 2. Spalte zu erhalten. Alle Datenrahmen haben eine unterschiedliche Anzahl von Reihen. Ich habe bereits Code geschrieben, der lapply verwendet, der jede Zeile mit der Variablen "num" extrahieren kann (wobei NA für Zahlen zurückgegeben wird, die die Zeilenlänge der Datenrahmen überschreiten), jedoch möchte ich eine Variable num = "worst" einfügen letzte Reihe, zweite Spalte der verfügbaren Daten. Dies ist der Code die „n-ten“ Zeile (xyz ist die Liste der Datenrahmen) retrive:Drucken Sie die letzte Zeile aus einer Liste von Datenrahmen

if(num=="best"){num=as.integer(1)} else 
(num=as.integer()) 

rownumber<-lapply(xyz, "[", num, 2, drop=FALSE) 

worden Knacken meinen Kopf den ganzen Tag versucht, eine Lösung zu finden, um num zu erklären == „worst“. Ich möchte Schleifen vermeiden, deshalb benutze ich platt, aber vielleicht gibt es keinen anderen Weg?

+0

Verwenden Sie die Funktion 'tail' mit' lapply'. 'tail' hat ein' n' Argument. – A5C1D2H2I1M1N2O1R2T1

Antwort

2

Mein Verständnis für die Frage ist, dass Sie eine Funktion, die die zweite Spalte eines data.frame von einem list von Datenrahmen gibt, mit einem optionalen Argument worst, die Ihnen erlaubt, Beschränke es auf die letzte Beobachtung.

Ich denke, der einfachste Weg, dies zu tun ist, eine Hilfsfunktion zu schreiben, und wenden Sie es dann auf Ihre Liste mit lapply.

Ich habe eine selector-Funktion geschrieben, die ein Zeilen- und Spaltenargument sowie ein worst Argument übernimmt. Ich denke, das macht alles, was du brauchst.

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

Wie wäre es ...

lapply(xyz, tail, 1) 
+1

+1 natürlich :) – A5C1D2H2I1M1N2O1R2T1

+0

@Jiber, ich glaube nicht, dass dies die eigentliche Frage beantwortet - die OP wollte Hilfe beim Schreiben einer Funktion, die Zeilen- und Spaltenkombinationen auswählt, mit einem Argument "schlechtestes", das die letzte Zeile zurückgibt. – ricardo

Verwandte Themen