So I have the following data.table issue:
library(data.table)
dt1<-data.table(V1=runif(10),V2=sample(10),ID=1:10)
dt1
V1 V2 ID
1: 0.26880759 10 1
2: 0.59148373 9 2
3: 0.15106101 8 3
4: 0.64780998 5 4
5: 0.09067745 7 5
6: 0.57337100 2 6
7: 0.17920313 3 7
8: 0.87948063 4 8
9: 0.25167438 1 9
10: 0.82715461 6 10
and I am wishing to perform a column rename (except one column, namely the "ID").Although names(dt1[,-"ID"]) works OK yielding:
[1] "V1" "V2"
The following command fails:
names(dt1[,-"ID"])<-c("souksou","mouksou")
Error in -"ID" : invalid argument to unary operator
Of course the issue is bypassed via:
names(dt1)[!(names(dt1) %in% "ID")]<-c("souksou","mouksou")
names(dt1)
[1] "souksou" "mouksou" "ID"
My question to the community is why this happens.
To put my comment into a more visible answer: in data.table , the function setnames permits to rename columns (all of them or a subset of them) by reference.
Try ?setnames to see how it works. Basically, you need to give the function 3 arguments, x, old and new: x is your data.table, old are the names or the indices of the variables you want to rename (if you want to rename all of the variables, old can be the new names and you don't need to provide new) and new is the new column names.
In your example, you need to do:
setnames(dt1, c("V1", "V2"), c("souksou","mouksou"))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With