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

在R中提取数据框两字符串列的相同字符(大小写不敏感)

在R语言中提取两字符串列的相同字符

需求说明

现有数据框df,需提取string1与string2列中大小写敏感的相同字符:

  • 存在多个相同字符时,将所有匹配字符拼接返回
  • 无匹配字符时返回NA

原始数据

# 原始数据框
  string1 string2
1     bDe     lDC
2      gj      iE
3     Plm     DOl
4    QWVe    dVtQ

期望输出

# 目标输出
  string1 string2 similar
1     bDe     lDC       D
2      gj      iE    <NA>
3     Plm     DOl       l
4    QWVe    dVtQ      VQ

数据框dput结构

df <- structure(list(string1 = c("bDe", "gj", "Plm", "QWVe"), string2 = c("lDC", 
"iE", "DOl", "dVtQ")), class = "data.frame", row.names = c(NA, 
-4L))

解决方案

方法1:Base R实现

自定义函数逐行处理字符串对,拆分字符后找交集并拼接:

# 定义提取相同字符的函数
get_common_chars <- function(s1, s2) {
  # 拆分字符串为单个字符向量
  chars1 <- strsplit(s1, "")[[1]]
  chars2 <- strsplit(s2, "")[[1]]
  # 获取两字符串的字符交集
  common_chars <- intersect(chars1, chars2)
  # 结果处理:无交集返回NA,否则拼接字符
  if (length(common_chars) == 0) {
    NA_character_
  } else {
    paste(common_chars, collapse = "")
  }
}

# 应用函数生成similar列
df$similar <- mapply(get_common_chars, df$string1, df$string2)

运行后即可得到目标结果:

> df
  string1 string2 similar
1     bDe     lDC       D
2      gj      iE    <NA>
3     Plm     DOl       l
4    QWVe    dVtQ      VQ

方法2:Tidyverse实现

结合dplyr与purrr实现管道化操作:

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

df <- df %>%
  mutate(similar = map2_chr(string1, string2, function(x, y) {
    chars_x <- str_split(x, "")[[1]]
    chars_y <- str_split(y, "")[[1]]
    common <- intersect(chars_x, chars_y)
    if (length(common) == 0) NA_character_ else str_c(common, collapse = "")
  }))

扩展:忽略大小写匹配

若需忽略大小写提取相同字符(保留原字符格式),可修改函数逻辑:

get_common_chars_case_insensitive <- function(s1, s2) {
  chars1 <- strsplit(s1, "")[[1]]
  chars2 <- strsplit(s2, "")[[1]]
  # 基于小写匹配,保留原字符
  match_logic <- tolower(chars1) %in% tolower(chars2)
  common_chars <- chars1[match_logic]
  
  if (length(common_chars) == 0) {
    NA_character_
  } else {
    paste(common_chars, collapse = "")
  }
}

# 应用示例
df$similar_case_insensitive <- mapply(get_common_chars_case_insensitive, df$string1, df$string2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:40:36