替换列名称

时间:2017-05-16 06:07:54

标签: r

我从较大的表中创建了一个较小的表。在这个较小的表中选择的列不是固定的,即用户可以在将来选择不同的集合。

两个表中的列名都基于sap定义

我有另一个文件,它将所有列名称映射为更简单的格式。

如果列表已修复,我可以使用重命名选项。由于列的列表未修复,因此重命名选项很繁琐。

我如何确保该用户获得正确的名称,无论他的选择如何?

较大的表格A =

a,b,c,d,e,f,g
1,2,3,4,5,6,7
8,9,10,11,12,13,14

较小的表格B =

a,b,c
1,2,3
8,9,10

名称映射表C =

Col1,Col2
a,name
b,age
c,height
d,weight
e,salary
f,firm
g,address

我希望我的程序能够参考映射表C&重命名B中的列名。在这种情况下的预期输出 -

name,age,height
1,2,3
8,9,10

如果将来用户选择列b,f& G。代码应该能够使用映射文件用正确的名称替换它。我希望它清楚

1 个答案:

答案 0 :(得分:3)

我们可以使用match(假设映射数据集('df3')的列是character

names(df2) <- df3$Col2[match(names(df2), df3$Col1)]
df2
#     name age height
#1    1   2      3
#2    8   9     10

数据

df1 <- structure(list(a = c(1L, 8L), b = c(2L, 9L), c = c(3L, 10L), 
d = c(4L, 11L), e = c(5L, 12L), f = c(6L, 13L), g = c(7L, 
14L)), .Names = c("a", "b", "c", "d", "e", "f", "g"), 
 class = "data.frame", row.names = c(NA, 
 -2L))

df2 <- structure(list(name = c(1L, 8L), age = c(2L, 9L), 
 height = c(3L,    
 10L)), .Names = c("name", "age", "height"), class = "data.frame", 
 row.names = c(NA, -2L))

df3 <- structure(list(Col1 = c("a", "b", "c", "d", "e", "f", "g"), 
  Col2 = c("name", 
 "age", "height", "weight", "salary", "firm", "address")), 
 .Names = c("Col1", "Col2"), class = "data.frame", row.names = c(NA, 
  -7L))