我正在处理一个大型数据框(超过100列),我需要重命名这些列。假设感兴趣的数据帧看起来像这样:
C D E F G H
1 10 200 50 40 60 10
2 30 400 20 30 30 10
3 20 40 30 30 50 10
我还有一个“关系”数据帧,其中的行将原始列名与所需的新名称匹配,如下所示:
Code Name
1 C Cat
2 D Dog
3 E Emu
4 F Fish
5 G Goat
6 H Hog
我正在寻找的是基本或打包函数,它允许我使用此匹配数据框来重命名原始列,从而产生如下所示的最终数据框:
Cat Dog Emu Fish Goat Hog
1 10 200 50 40 60 10
2 30 400 20 30 30 10
3 20 40 30 30 50 10
请记住,实际的应用程序具有大约100列以上的列,因此在这里希望尽可能减少手工编码的数量,谢谢!
可以用rename_at
(假设列“ code”,“ Name”是关系数据集中的character
类来完成)
library(dplyr)
df1 %>%
rename_at(vars(relational$Code), ~ relational$Name)
或者另一个选项是setnames
中的data.table
library(data.table)
setDT(df1)
setnames(df1, relational$Code, relational$Name)
或在base R
中>
names(df1) <- setNames(relational$Name, relational$Code)[names(df1)]
数据
df1 <- structure(list(C = c(10L, 30L, 20L), D = c(200L, 400L, 40L),
E = c(50L, 20L, 30L), F = c(40L, 30L, 30L), G = c(60L, 30L,
50L), H = c(10L, 10L, 10L)), class = "data.frame", row.names = c("1",
"2", "3"))
relational <- structure(list(Code = c("C", "D", "E", "F", "G", "H"), Name = c("Cat",
"Dog", "Emu", "Fish", "Goat", "Hog")), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5", "6"))
我们可以使用match
,使列名与Code
匹配并获得相应的Name
。