2009-10-08 3 views
6

Ich denke, dass es einen besseren Weg geben muss, dies zu tun.Ordne Datenrahmenspalten neu an und ignoriere nicht identifizierte Spalten

Ich versuche, die Spalten in einem Datenrahmen neu zu ordnen. Ich habe eine Liste, ordered.colnames, die die neue Reihenfolge darstellt - aber einige der Spalten existieren nicht in dataset. Um den Fehler "undefined columns selected" zu vermeiden, habe ich den relevanten Slicing in eine Funktion verpackt.

Die folgende Methode funktioniert, aber gibt es eine bessere Möglichkeit, dies zu tun?

> ordered.colnames[1:5] 
[1] "lady_22102"   "attentions_83249" "perseverance_17864" 
[4] "cecil_84477"  "cecilia_133476" 

dataset.reordered = c() 
for (i in 1:length(ordered.colnames)) { 
    col = NA 
    col = try(cbind(dataset[,ordered.colnames[i]]),silent=TRUE) 
    if (!inherits(col,"try-error")) { 
     colnames(col) = ordered.colnames[i] 
     dataset.reordered = cbind(dataset.reordered, col) 
    } 
} 

Antwort

13

Können Sie das nicht einfach tun?

ordered.colnames <- ordered.colnames[ordered.colnames %in% colnames(dataset)] 
+0

Das funktioniert. Ich kann nicht glauben, dass ich nicht daran gedacht habe ... Danke. – ariddell

+0

Siehe auch Schnittpunkt – hadley

Verwandte Themen