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

R语言:如何从多列提取指定字符串生成新列?

解决方法

你的代码问题在于across()会返回包含多列的tibble,但你试图将其直接赋值给单个列component,导致结构不匹配。要实现目标,需将across提取的结果合并为单个列,取每行中第一个非NA的匹配值。

修正代码(简洁版)

library(dplyr)
library(stringr)

data <- tibble(
    component1 = c(NA, NA, "Word", NA, NA, "Word"),
    component2 = c(NA, "Word", "different_word", NA, NA, "not_this")
)

# 生成目标结果
result <- data %>%
    mutate(
        component = coalesce(
            str_extract(component1, "Word"),
            str_extract(component2, "Word")
        )
    )

# 验证与目标是否一致
all.equal(result, goal)
# [1] TRUE

灵活版(适配多列场景)

如果目标列数量较多,可结合rowwise()和c_across()简化代码:

result <- data %>%
    rowwise() %>%
    mutate(
        component = coalesce(!!!str_extract(c_across(starts_with("component")), "Word"))
    ) %>%
    ungroup()

关键说明

  • str_extract():匹配到"Word"时返回该字符串,否则返回NA
  • coalesce():依次取每行的第一个非NA值,满足"任意列有'Word'则保留,无则返回NA"的需求
  • 灵活版通过c_across()批量获取目标列值,!!!将提取结果展开为coalesce的参数,适合列名前缀统一的多列场景

内容的提问来源于stack exchange,提问作者Jan von Heynitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:55:24