You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:55:24