2013-04-21 9 views
14

data.tableの列をどのように並べ替えるのですか? 私はdata.frameのためにそれを行うことができますが、data.tableはメソッドをオーバーライドします。これはないHow does one reorder columns in R?ためのだまされやすい人であることをdata.table列の順序を変更するにはどうすればよいですか?

> df <- data.frame(a=1:3,b=4:6) 
> df 
    a b 
1 1 4 
2 2 5 
3 3 6 
> df[c("b","a")] 
    b a 
1 4 1 
2 5 2 
3 6 3 
> dt <- as.data.table(df) 
> dt 
    a b 
1: 1 4 
2: 2 5 
3: 3 6 
> dt[c("b","a")] 
Error in `[.data.table`(dt, c("b", "a")) : 
    When i is a data.table (or character vector), x must be keyed (i.e. sorted, and, marked as sorted) so data.table knows which columns to join to and take advantage of x being sorted. Call setkey(x,...) first, see ?setkey. 
Calls: [ -> [.data.table 

注意を。

+2

解決策は以下のとおりです。 [FAQ 2.1.7](http://datatable.r-forge.r-project.org/datatable-faq.pdf)では、この 'data.table'と' data.frame'の違いについて説明しています – mnel

答えて

25

使用setcolorder

> library(data.table) 
> dt <- data.table(a=1:3,b=4:6) 
> setcolorder(dt, c("b", "a")) 
> dt 
    b a 
1: 4 1 
2: 5 2 
3: 6 3 
1

これは、(元のテーブルを変更せずに)あなたはdata.tableでそれを行う方法です。

dt[, list(b, a)] 

または

dt[, c("b", "a"), with = F] 

または

dt[, c(2, 1), with = F] 
+3

または 'setcolorder(copy (dt)、c( 'b'、 'a')) ' – mnel

関連する問題