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

R语言按input列前两个字符串匹配批量更新多列方法咨询

问题背景

现有R语言数据框结构如下,需要按照规则填充n1、n2、n3三列的缺失值:

df <- data.frame(input = c("Antidesma cuspidatum Mull.Arg.", "Antidesma cuspidatum Müll.Arg.", 
                  "Alchornea parviflora (Benth.) Mull.Arg.", "Alchornea parviflora (Benth.) Müll.Arg."),
                 n1 = c("Antidesma cuspidatum", NA, "Alchornea parviflora", NA),
                 n2 = c("Antidesma", NA, "Alchornea", NA),
                 n3 = c("Phyllanthaceae", NA, "Euphorbiaceae", NA))

原始数据打印结果:

inputn1n2n3
Antidesma cuspidatum Mull.Arg.Antidesma cuspidatumAntidesmaPhyllanthaceae
Antidesma cuspidatum Müll.Arg.
Alchornea parviflora (Benth.) Mull.Arg.Alchornea parvifloraAlchorneaEuphorbiaceae
Alchornea parviflora (Benth.) Müll.Arg.

需求说明

将input列前两个单词相同的行归为同一组,同一组内的n1、n2、n3三列统一使用组内已有的有效值填充缺失值,最终期望结果如下:

inputn1n2n3
Antidesma cuspidatum Mull.Arg.Antidesma cuspidatumAntidesmaPhyllanthaceae
Antidesma cuspidatum Müll.Arg.Antidesma cuspidatumAntidesmaPhyllanthaceae
Alchornea parviflora (Benth.) Mull.Arg.Alchornea parvifloraAlchorneaEuphorbiaceae
Alchornea parviflora (Benth.) Müll.Arg.Alchornea parvifloraAlchorneaEuphorbiaceae
实现方案

方案1:tidyverse生态实现(代码可读性高)

依赖dplyr做分组操作、stringr做文本拆分,代码如下:

library(dplyr)
library(stringr)

df_result <- df %>%
  # 提取input前两个单词作为分组标识
  mutate(group_id = word(input, start = 1, end = 2)) %>%
  group_by(group_id) %>%
  # 对目标三列用组内第一个非缺失值填充所有行
  mutate(across(c(n1, n2, n3), ~ na.omit(.x)[1])) %>%
  ungroup() %>%
  # 移除临时分组列
  select(-group_id)

方案2:base R实现(无需安装第三方包)

使用基础函数strsplit拆分文本、ave做分组填充,代码如下:

# 生成分组标识
group_id <- sapply(strsplit(df$input, split = " "), function(x) paste(x[1:2], collapse = " "))
# 逐列分组填充缺失值
df$n1 <- ave(df$n1, group_id, FUN = function(col) na.omit(col)[1])
df$n2 <- ave(df$n2, group_id, FUN = function(col) na.omit(col)[1])
df$n3 <- ave(df$n3, group_id, FUN = function(col) na.omit(col)[1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:57:02