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

如何从两个向量中提取匹配字符?R语言技术问询

提取字符串中的共同字符解决方案

问题说明

需要对数据框每行的两个字符串列,提取二者包含的共同字符;若存在多个匹配项,返回列表形式即可。

示例数据

x <- c("abcde", "lmnop")
y <- c("efghi", "uvmxw")
df <- data.frame(x, y)

错误尝试分析

你之前用的unique(x, y)无法实现需求,因为unique()的作用是去除向量内的重复值,并非寻找两个字符串的字符交集。

正确解法

方法1:Tidyverse 工具链(返回列表列)

利用dplyr处理数据框,stringr拆分字符串,purrr逐行处理:

library(dplyr)
library(stringr)
library(purrr)

df_result <- df |>
  mutate(z = map2(x, y, ~ intersect(str_split(.x, "")[[1]], str_split(.y, "")[[1]])))

运行后z列会以列表形式存储每行的共同字符,单个匹配时是长度为1的向量,多个匹配时是包含所有共同字符的向量。

方法2:Tidyverse 工具链(合并为字符串)

如果希望将多个共同字符合并成单个字符串(比如匹配到"b"和"c"时返回"bc"),可以用map2_chr替换map2:

df_result <- df |>
  mutate(z = map2_chr(x, y, ~ paste(intersect(str_split(.x, "")[[1]], str_split(.y, "")[[1]]), collapse = "")))

方法3:Base R 实现(返回列表列)

无需加载额外包,用mapply逐行处理:

df$z <- mapply(function(a, b) intersect(strsplit(a, "")[[1]], strsplit(b, "")[[1]]), df$x, df$y)

方法4:Base R 实现(合并为字符串)

df$z <- mapply(function(a, b) paste(intersect(strsplit(a, "")[[1]], strsplit(b, "")[[1]]), collapse = ""), df$x, df$y)

结果验证

以上方法处理示例数据后,都会得到符合预期的结果:

x       y z
1 abcde   efghi e
2 lmnop uvmxw   m

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:40:18