如果查找表包含旧列名,请使用查找表替换列名

时间:2017-12-04 15:24:00

标签: r lookup data-manipulation

我有一个如下所示的数据框:

test <- data.frame("PLOT.ID" = c(1,2,3),
                "Diameter" = c(1,2,3),
                "tag_id" = c(1,2,3),
                "COL_NA" = c(1,2,3))

我还有一个查找表,其中包含我想要更改的旧列名:

lookup <- data.frame(old = c("PLOT.ID", "Diameter"), 
                     new = c("plot_id", "diam"))

如何使用查找表仅替换test中显示的lookup$old中的列名,并保留其他列的名称?

到目前为止,我的方法删除了不会出现在lookup$old中的列名,并将其替换为空格:

test_new <- setNames(test, lookup$new[match(names(test), lookup$old)])

1 个答案:

答案 0 :(得分:1)

您可以使用mapvalues包中的plyr功能:

test_new <- test
colnames(test_new) <- plyr::mapvalues(colnames(test),
    as.character(lookup$old), 
    as.character(lookup$new))

> test_new
  plot_id diam tag_id COL_NA
1       1    1      1      1
2       2    2      2      2
3       3    3      3      3