2009-10-08 12 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

+0

また、intersectを参照してください – hadley

関連する問題