我知道有一种简单的方法可以做到这一点,但我不记得我是怎么做的,也找不到我的笔记。基本上我有一个带有一堆列名的数据框。我还有一个键值对数据框,其中包含一些需要替换现有列名的新列名。我想重命名所有有一对(没有没有)的列。例如,我们可以使用 mtcars:
x<-mtcars
idkey <- data.frame("original" = c("cyl","hp"), "new" = c("cylinder", "horsepower"))
> head(x)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> idkey
original new
1 cyl cylinder
2 hp horsepower
我只想替换 idkey 中存在的 x 中的列名。所以在替换名称(x)之后将从这里开始
> names(x)
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
对此:
> names(x)
[1] "mpg" "cylinder" "disp" "horsepower" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
注意我需要这个到 只有重命名键中存在的列,因此某些列可能不会重命名,并且它们不会按任何特定顺序排列。
最佳答案
dplyr::recode
也可以:
colnames(x) <- dplyr::recode(
colnames(x),
!!!setNames(as.character(idkey$new), idkey$original)
)
关于r - 使用键值对字典有选择地重命名 R 数据框列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314285/