使用键、值对字典有选择地重命名R数据帧列名
我知道有一个简单的方法可以做到这一点,但我不记得我是怎么做到的,也找不到我的笔记。基本上,我有一个数据框,其中有一堆列名。我还有一个键、值对数据框,它有一些新的列名,需要替换现有的列名。我想重命名所有有一对的列(没有一对没有)。例如,我们可以使用mtcars:使用键、值对字典有选择地重命名R数据帧列名,r,dataframe,R,Dataframe,我知道有一个简单的方法可以做到这一点,但我不记得我是怎么做到的,也找不到我的笔记。基本上,我有一个数据框,其中有一堆列名。我还有一个键、值对数据框,它有一些新的列名,需要替换现有的列名。我想重命名所有有一对的列(没有一对没有)。例如,我们可以使用mtcars: x<-mtcars idkey <- data.frame("original" = c("cyl","hp"), "new" = c("cylinder", "horsepower")) 我只想替换idkey中存在的x中
x<-mtcars
idkey <- data.frame("original" = c("cyl","hp"), "new" = c("cylinder", "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"
注意:我只需要这样做来重命名键中存在的列,因此某些列可能不会被重命名,并且它们不会以任何特定的顺序排列。在这种情况下,
在
处重命名将非常有用。从“idkey”的“original”列中指定要在vars
内重命名的变量(这些列是factor
-因此使用as.character
转换为character
类,因为data.frame
默认选项是stringsafactors=TRUE
)
我们可以在base R中使用
match
names(x)[match(idkey$original, names(x))] <- idkey$new
head(x)
# mpg cylinder disp horsepower 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
names(x)[match(idkey$original,names(x))]dplyr::recode
也可以:
colnames(x) <- dplyr::recode(
colnames(x),
!!!setNames(as.character(idkey$new), idkey$original)
)
colnames(x)Adplyr>=1.0.0
使用rename\u的解决方案
:
library(tidyverse)
idkey2 <- idkey %>% pull(new, original)
x %>%
rename_with(~ idkey2[.], !! names(idkey2)) %>%
head()
#> mpg cylinder disp horsepower drat wt qsec vs am gear
#> Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4
#> Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4
#> Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4
#> Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3
#> Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3
#> Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3
#> carb
#> Mazda RX4 4
#> Mazda RX4 Wag 4
#> Datsun 710 1
#> Hornet 4 Drive 1
#> Hornet Sportabout 2
#> Valiant 1
库(tidyverse)
idkey2%拉力(新的、原装的)
x%>%
使用(~idkey2[.],!!名称(idkey2))%>%重命名_
总目()
#>mpg气缸显示马力drat wt qsec vs am齿轮
#>马自达RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4
#>马自达RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4
#>Datsun 710 22.8 4 108 93 3.85 2.320 18.61 11 4
#>大黄蜂4路21.4 6 258 110 3.08 3.215 19.44 1 0 3
#>大黄蜂运动约18.7 8 360 175 3.15 3.440 17.02 0 3
#>英勇的18.1 6 225 105 2.76 3.460 20.22 1 03
#>碳水化合物
#>马自达RX44
#>马自达RX4 Wag 4
#>Datsun 710 1
#>大黄蜂4路1号
#>大黄蜂2号
#>勇敢的1
我相信这正是我试图记住的解决方案。谢谢
x<-mtcars
idkey <- data.frame("original" = c("cyl","hp"),
"new" = c("cylinder", "horsepower"), stringsAsFactors = FALSE)
colnames(x) <- dplyr::recode(
colnames(x),
!!!setNames(as.character(idkey$new), idkey$original)
)
library(tidyverse)
idkey2 <- idkey %>% pull(new, original)
x %>%
rename_with(~ idkey2[.], !! names(idkey2)) %>%
head()
#> mpg cylinder disp horsepower drat wt qsec vs am gear
#> Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4
#> Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4
#> Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4
#> Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3
#> Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3
#> Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3
#> carb
#> Mazda RX4 4
#> Mazda RX4 Wag 4
#> Datsun 710 1
#> Hornet 4 Drive 1
#> Hornet Sportabout 2
#> Valiant 1