2009-10-08 17 views
6

Creo que debe haber una forma mejor de hacerlo.Reordenar las columnas del dataframe ignorando las columnas no identificadas

Estoy intentando reordenar las columnas en un marco de datos. Tengo una lista, ordered.colnames, que representa el nuevo pedido, pero algunas de las columnas no existen en dataset. Para evitar el error "undefined columns selected", he ajustado el corte relevante en una función try().

El siguiente método funciona, pero ¿hay una mejor manera de hacerlo?

> 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) 
    } 
} 

Respuesta

13

¿No puede simplemente hacer esto?

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

Eso funciona. No puedo creer que no haya pensado en eso ... Gracias. – ariddell

+0

Ver también intersectar – hadley

Cuestiones relacionadas