如何基于species匹配用df1的genus替换df2的ID列?(dplyr优先)
用dplyr的left_join实现ID替换需求
完全可以通过dplyr的left_join()完成这个替换操作,以下是具体实现步骤:
示例数据
df1
> df1 genus species 1 Orthobunyavirus Variola virus 2 Alphatorquevirus Torque teno virus 6 3 Yatapoxvirus Yaba-like disease virus
df2
> df2 ID 1 Variola virus 2 Torque teno virus 6 3 Yaba-like disease virus
数据结构
> dput(df1) structure(list(genus = c("Orthobunyavirus", "Alphatorquevirus", "Yatapoxvirus"), species = c("Variola virus", "Torque teno virus 6", "Yaba-like disease virus")), class = "data.frame", row.names = c(NA, -3L)) > dput(df2) structure(list(ID = c("Variola virus", "Torque teno virus 6", "Yaba-like disease virus")), class = "data.frame", row.names = c(NA, -3L))
实现代码
先加载dplyr包,通过左连接关联数据集后替换ID列值:
library(dplyr) # 方法1:分步处理,逻辑清晰 df_result <- df2 %>% left_join(df1, by = c("ID" = "species")) %>% # 按ID与species的匹配关系关联数据 mutate(ID = genus) %>% # 将genus的值替换到ID列 select(ID) # 仅保留目标列 # 方法2:简洁写法,直接在select中完成重命名 df_result <- df2 %>% left_join(df1, by = c("ID" = "species")) %>% select(ID = genus)
输出结果
> df_result ID 1 Orthobunyavirus 2 Alphatorquevirus 3 Yatapoxvirus
说明
left_join()的by参数明确匹配规则:用df2的ID列匹配df1的species列,会保留df2的所有行,若存在不匹配的记录,对应位置会显示NA。- 两种方法最终效果一致,可根据个人习惯选择。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

