2
在合併之前,有時需要更改列名的大小寫以保持一致性。使用data.frame
時,這非常簡單(如here所述);雖然同樣的解決方案對``data.table`有效,它會引發警告。例如,什麼是最有效的方式來改變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
'setnames'是'data.table'包中的一個函數,並且警告指出這是做事的首選方式。 – James 2013-05-10 09:22:49
那麼你是否要求更多的東西來解決你的解決方法,比如'setnames(DT,toupper(names(DT)))'? – 2013-05-10 11:36:08
我不知道你是否編輯了你的問題......無論如何,正如前面的評論已經說過的那樣,'setnames'不是**解決方法,就像你說的那樣,但是'data.table'方法做到這一點。所以你可以把它作爲回答並接受它。 – 2013-05-10 16:41:47