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

使用R tidyverse补全数据框中缺失作者信息的name3列物种名称

实现思路

我们可以先从现有数据中提取「带作者后缀的完整物种名」和对应的「不含作者的短物种名」生成匹配对照表,再用对照表批量补全所有短名称的后缀即可。

实现代码(tidyverse 版本)

首先加载依赖包:

library(tidyverse)

你的示例数据如下:

df <- data.frame(
  name1 = c("Acer laurinum", "Acmella paniculata", "Aglaia lawii", NA, NA), 
  name2 = c(NA, NA, NA, "Acer laurinum Hassk.", "Aglaia lawii (Wight)"),
  name3 = c("Acer laurinum", "Acmella paniculata", "Aglaia lawii", "Acer laurinum Hassk.", "Aglaia lawii (Wight)")
)

补全处理代码:

# 1. 生成匹配对照表:短物种名对应带作者的完整名称
match_table <- df %>%
  # 筛选带作者的完整名称行:这里用单词数大于2作为判断标准,可根据你的数据调整规则
  filter(str_count(name3, "\\S+") > 2) %>%
  # 提取前两个单词作为匹配用的短物种名
  mutate(short_name = word(name3, 1, 2)) %>%
  select(short_name, full_name = name3)

# 2. 补全原数据的name3列
df_result <- df %>%
  mutate(short_name = word(name3, 1, 2)) %>%
  # 关联匹配表
  left_join(match_table, by = "short_name") %>%
  # 优先用匹配到的完整名称,无匹配则保留原值
  mutate(name3 = coalesce(full_name, name3)) %>%
  # 移除辅助计算列
  select(-short_name, -full_name)

输出结果

运行后得到的df_result和你要求的期望输出完全一致:

name1                name2                  name3
1      Acer laurinum                 <NA>   Acer laurinum Hassk.
2 Acmella paniculata                 <NA>     Acmella paniculata
3       Aglaia lawii                 <NA> Aglaia lawii (Wight)
4               <NA> Acer laurinum Hassk.   Acer laurinum Hassk.
5               <NA> Aglaia lawii (Wight) Aglaia lawii (Wight)

注意事项

如果你的物种名包含亚种、变种等超过两个单词的情况,调整word(name3, 1, 2)的截取位数即可适配。


内容的提问来源于stack exchange,提问作者Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:45:00