我有一个数据框
> original
a b
1 1 4
2 2 5
3 3 6
和另一个将旧名称与新名称相关联的数据框
> new
old_name new_name
1 a c
2 b d
我想应用映射,因此列获得新名称:
> result
c d
1 1 4
2 2 5
3 3 6
以下是代码:
library(tidyverse)
original = data.frame(a=c(1,2,3),b=c(4,5,6))
new = data.frame(old_name=c('a','b'), new_name=c('c','d'))
result = original %>% rename(c=a,d=b)
dput(list(original, new, result))
答案 0 :(得分:2)
我们可match
names
original
new$old_name
new_name
,然后选择相应的names
并将其应用于original
names(original) <- new$new_name[match(names(original), new$old_name)]
original
# c d
#1 1 4
#2 2 5
#3 3 6
1}}。
dplyr
在setnames
library(dplyr)
original %>%
setNames(new$new_name[match(names(original), new$old_name)])
bubble sort algorithm
答案 1 :(得分:1)
或者将dplyr::rename
与UQS
或!!!
一起使用(取消引用并拼接参数):
library(dplyr)
original %>%
rename(!!!setNames(new$old_name, new$new_name))
# c d
#1 1 4
#2 2 5
#3 3 6
从旧名称到新名称创建mapping
:
mapping <- setNames(new$old_name, new$new_name)
mapping
# c d
#"a" "b"
{p> splice
mapping
至rename
与!!!
:
original %>% rename(!!!mapping)
相当于rename(c = a, d = b)
。