列名をつけるdata.table::setnamesですが, 挙動が直感と合わないことがありました.
library(data.table)
library(dplyr)
説明用に, 簡単なデータフレームを用意します.
data(mtcars)
cars_data = mtcars %>%
mutate(name = rownames(mtcars)) %>%
select(name, mpg)
cars_data %>% head(3)
## name mpg
## 1 Mazda RX4 21.0
## 2 Mazda RX4 Wag 21.0
## 3 Datsun 710 22.8
setnamesで列名を指定するときに, 直感と合わないことが起こっているように思えます.
## 1つめ
cars_data_1 = cars_data
cars_data_1 %>% setnames(c("name_1", "mpg_1"))
cars_data_1 %>% head(3)
## name_1 mpg_1
## 1 Mazda RX4 21.0
## 2 Mazda RX4 Wag 21.0
## 3 Datsun 710 22.8
## 2つめ
cars_data_2 = cars_data
cars_data_2 %>% setnames(c("name_2", "mpg_2"))
cars_data_2 %>% head(3)
## name_2 mpg_2
## 1 Mazda RX4 21.0
## 2 Mazda RX4 Wag 21.0
## 3 Datsun 710 22.8
## ここで, さっき作ったcars_data1を確認してみると,
cars_data_1 %>% head(3)
## name_2 mpg_2
## 1 Mazda RX4 21.0
## 2 Mazda RX4 Wag 21.0
## 3 Datsun 710 22.8
cars_data_1をsetnamesした後に, cars_data_2をsetnamesすると,
cars_data1も列名が変わっている...?
なんでcars_data1の列名まで変更されるんですかね??
以上です.