2009-10-08 109 views
6

我想有一個更好的方法來做到這一點。重新排序數據幀列,同時忽略不明的列

我想重新排列數據框中的列。我有一個列表,ordered.colnames,代表新的排序 - 但某些列不存在dataset。爲避免錯誤「undefined columns selected」,我已將相關切片包裝在try()函數中。

以下方法有效,但有沒有更好的方法來做到這一點?

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

回答

13

難道你不能這麼做嗎?

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

這是有效的。不能相信我沒有想到這一點..謝謝。 – ariddell 2009-10-08 16:12:02

+0

另見交點 – hadley 2009-10-10 13:16:24