当匹配到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))