【问题标题】:How to replace columns names based on a column_map objects between two dataframes in R如何根据 R 中两个数据框之间的 column_map 对象替换列名称
【发布时间】:2022-01-16 10:23:09
【问题描述】:

我有两个数据框,我需要根据column_map 替换第一个数据集的列名,该column_map 描述了替换列名的映射。

这是我的示例数据集的样子。

  dat.1 <- data.frame(column_1 = c(1:5),
                      column_2 = c(1:5),
                      column_3 = c(1:5),
                      column_4 = c(1:5))

> dat.1
  column_1 column_2 column_3 column_4
1        1        1        1        1
2        2        2        2        2
3        3        3        3        3
4        4        4        4        4
5        5        5        5        5

dat.2 <- data.frame(column_1a = c(1:5),
                    column_2b = c(1:5),
                    column_3c = c(1:5))

> dat.2
  column_1a column_2b column_3c
1         1         1         1
2         2         2         2
3         3         3         3
4         4         4         4
5         5         5         5

column_map <- data.frame(name.1 = c("column_1", "column_2", "column_3"),
                         name.2 = c("column_1a", "column_2b", "column_3c"))

> column_map
    name.1    name.2
1 column_1 column_1a
2 column_2 column_2b
3 column_3 column_3c

所以比如我需要根据column_map把dat.1中的column_1切换成column_1a等等。

编辑:我想保持第四列 column_4 不变,因为它没有被映射(在第二个数据集中没有等价性)。

期望的输出是:

> dat.1
  column_1a column_2b column_3c column_4
1         1         1         1     1
2         2         2         2     2
3         3         3         3     3
4         4         4         4     4
5         5         5         5     5

感谢您对此进行调查!

【问题讨论】:

    标签: r names


    【解决方案1】:

    你可以那样做。

    colnames(dat.1) <- column_map[match(colnames(dat.1), column_map[,1]), 2]
    
    > dat.1
      column_1a column_2b column_3c
    1         1         1         1
    2         2         2         2
    3         3         3         3
    4         4         4         4
    5         5         5         5
    
    

    编辑:

    关于您的编辑,您可以使用来自data.table-package 的setnames()

    setnames(dat.1, old = column_map$name.1, new = column_map$name.2, skip_absent = T)
    
    > dat.1
      column_1a column_2b column_3c column_4
    1         1         1         1        1
    2         2         2         2        2
    3         3         3         3        3
    4         4         4         4        4
    5         5         5         5        5
    

    【讨论】:

    • 感谢您的建议,我在第一个数据集中添加了另一列,该列不在映射数据框中。有没有办法保留该列并更改其余列的名称?
    • 感谢您的宝贵时间!
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 2023-02-15
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2018-12-21
    相关资源
    最近更新 更多