如何根据 R 中两个数据帧之间的 column_map 对象替换列名
How to replace columns names based on a column_map objects between two dataframes in R
我有两个数据框,我需要根据描述替换列名的映射的 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
感谢您的关注!
你可以那样做。
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
我有两个数据框,我需要根据描述替换列名的映射的 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
感谢您的关注!
你可以那样做。
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