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

如何在R中实现字符串字符与指定查找字符的逐位比对?

在R中实现字符比对生成0/1字符串向量的方法

这里提供几种实用的实现方式,满足你将每个字符串的字符与目标字符比对,输出由0(不匹配)和1(匹配)组成的字符串向量的需求:

方法1:使用base R的gsub(简洁高效)

利用字符串替换的思路,先把所有非目标字符替换为0,再将目标字符替换为1,全程矢量化处理,适合大规模数据:

input_vec <- c('aecde1234e', 'ewert6e8e0')
target_char <- 'e'

# 第一步:替换所有非目标字符为0
temp <- gsub(paste0("[^", target_char, "]"), "0", input_vec)
# 第二步:替换目标字符为1
result <- gsub(target_char, "1", temp)

# 查看结果
result
# 输出:[1] "0100100001" "1010001010"

方法2:base R拆分-比对-拼接(直观易懂)

拆分每个字符串为单个字符,逐个比对后转换为0/1,再拼接回字符串:

input_vec <- c('aecde1234e', 'ewert6e8e0')
target_char <- 'e'

result <- sapply(input_vec, function(str) {
  # 拆分字符串为字符向量
  char_vec <- strsplit(str, "")[[1]]
  # 比对并转换为整数(TRUE=1,FALSE=0)
  binary_vec <- as.integer(char_vec == target_char)
  # 拼接成字符串
  paste(binary_vec, collapse = "")
}, USE.NAMES = FALSE)

result

方法3:使用stringr包(tidyverse风格)

如果你习惯tidyverse生态,用stringr的函数可以更流畅地完成操作:

library(stringr)

input_vec <- c('aecde1234e', 'ewert6e8e0')
target_char <- 'e'

result <- input_vec %>%
  str_split("") %>%  # 拆分每个字符串为字符列表
  lapply(function(chars) {
    str_c(as.integer(chars == target_char), collapse = "")  # 比对后拼接
  }) %>%
  unlist()  # 转换为向量

result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:35:34