3

一貫性を保つために、マージする前に列名の大文字と小文字を変更すると便利な場合があります。これを使用する場合、data.frameこれは非常に簡単です(ここで概説されているように)。同じ解決策が ``data.table` でも機能しますが、警告がスローされます。例えば、

ran <- rep(34,50)
dom <- rep("cat",50)
table <- rep("pig", 50)

DT <- data.table(ran,dom,table); head(DT)
   ran dom table
1:  34 cat   pig
2:  34 cat   pig
3:  34 cat   pig
4:  34 cat   pig
5:  34 cat   pig
6:  34 cat   pig

##the data.frame way

names(DT) <- toupper(names(DT))

##the error 
Warning message:
In `names<-.data.table`(`*tmp*`, value = c("RAN", "DOM", "TABLE" :
  The names(x)<-value syntax copies the whole table. This is due to <- in R 
 itself. Please change to setnames(x,old,new) which does not copy and is faster. 
 See help('setnames'). You can safely ignore this warning if it is inconvenient 
 to change right now. Setting options(warn=2) turns this warning into an error, 
 so you can then use traceback() to find and change your names<- calls.

エラーを回避するために次の回避策を使用しました。広いデータセットでははるかに高速ですが、data.tableこれを行う方法はありますか?

##the work around
upper <- toupper(names(DT))

setnames(DT,upper);head(DT)

   RAN DOM TABLE
1:  34 cat   pig
2:  34 cat   pig
3:  34 cat   pig
4:  34 cat   pig
5:  34 cat   pig
6:  34 cat   pig
4

1 に答える 1

5

コメントが言うように、これに答えを与えることsetnamesdata.table機能であり、すでにdata.table推奨される方法です(からの長い警告がdata.table示唆するように)。例えば、

setnames(DT,toupper(names(DT)))

パッケージのsetNames機能と混同しないでください! stats(大文字に注意してくださいN)。

于 2013-05-11T00:34:04.763 に答える