当匹配到R中另一个数据帧中的列时,替换数据帧列中的值

当匹配到R中另一个数据帧中的列时,替换数据帧列中的值,r,dataframe,replace,R,Dataframe,Replace,我只是通读了一些类似的问题,但没有找到回答我具体问题的答案。 我有两个数据帧 df1 <- data.frame("name" = c("11-24", "Tim", "Anna", "67-14", "A0839", "A4b", "Lisa", "Selina")) df2 <- data.frame(

我只是通读了一些类似的问题,但没有找到回答我具体问题的答案。 我有两个数据帧

df1 <- data.frame("name" = c("11-24", "Tim", "Anna", "67-14", "A0839", "A4b", "Lisa", "Selina"))
df2 <- data.frame("abbreviation" = c("11-24", "67-14", "A0839", "A4b"),
                  "name" = c("Charles", "Nick", "Harry", "Lola"))
我想用df2中匹配的名称替换df1“name”列中的缩写。 所以11-24被Charles替换,A4b被Lola替换

我尝试的是:

df1 <- df1 %>% 
       mutate(name = ifelse(name %in% df2$abbreviation, df2$name, name))
我的数据帧具有不同的长度。 我正在寻找一个整洁的解决方案,也许你们中的一个人有什么想法

这对我有很大帮助:) 最好的,
凯瑟琳

使用join和
合并

library(dplyr)

df1 %>%
  left_join(df2, by = c('name' = 'abbreviation')) %>%
  transmute(name = coalesce(name.y, name))

#     name
#1 Charles
#2     Tim
#3    Anna
#4    Nick
#5   Harry
#6    Lola
#7    Lisa
#8  Selina

使用join和
合并

library(dplyr)

df1 %>%
  left_join(df2, by = c('name' = 'abbreviation')) %>%
  transmute(name = coalesce(name.y, name))

#     name
#1 Charles
#2     Tim
#3    Anna
#4    Nick
#5   Harry
#6    Lola
#7    Lisa
#8  Selina
在base中,您可以使用
match
使此更新加入

idx在base中,您可以使用
match
使此更新加入

idxBase R解决方案:

idx <- match(df1$name, df2$abbreviation)
transform(df1, name = ifelse(!is.na(idx), df2$name[idx], name))
idxBase R解决方案:

idx <- match(df1$name, df2$abbreviation)
transform(df1, name = ifelse(!is.na(idx), df2$name[idx], name))

idx完美,谢谢!我不知道为什么,但我认为left_join不会。。这帮了我:)太好了,谢谢你!我不知道为什么,但我认为left_join不会。。这对我有帮助:)
idx <- match(df1$name, df2$abbreviation)
transform(df1, name = ifelse(!is.na(idx), df2$name[idx], name))