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

基于Base R识别字符串修改内容与位置并生成DataFrame新列

Base R实现文本差异识别(生成new_系列列)

给定仅包含current_text和previous_text两列的数据框,我们需要对比每行的前后文本,识别出修改的内容(new_text)及位置(new_text_position),以下是Base R的实现方案:

1. 初始数据准备

首先构造仅含目标输入列的数据框:

df <- data.frame(
  current_text = c('thank','thanks','thank','thdank'),
  previous_text = c(NA, 'thank','thanks','thank'),
  stringsAsFactors = FALSE
)

2. 定义文本对比函数

编写自定义函数处理三种核心修改场景:新增单个字符、删除单个字符、替换单个字符:

compare_text <- function(current, previous) {
  if (is.na(previous)) {
    return(list(new_text = NA_character_, new_text_position = NA_integer_))
  }
  
  curr_chars <- strsplit(current, "")[[1]]
  prev_chars <- strsplit(previous, "")[[1]]
  curr_len <- length(curr_chars)
  prev_len <- length(prev_chars)
  
  # 处理新增单个字符的情况
  if (curr_len == prev_len + 1) {
    for (i in seq_len(curr_len)) {
      if (identical(curr_chars[-i], prev_chars)) {
        return(list(new_text = curr_chars[i], new_text_position = i))
      }
    }
  }
  # 处理删除单个字符的情况
  else if (curr_len == prev_len - 1) {
    for (i in seq_len(prev_len)) {
      if (identical(prev_chars[-i], curr_chars)) {
        return(list(new_text = "[DELETE]", new_text_position = NA_integer_))
      }
    }
  }
  # 处理单个字符替换的情况
  else if (curr_len == prev_len) {
    diff_pos <- which(curr_chars != prev_chars)
    if (length(diff_pos) == 1) {
      return(list(new_text = curr_chars[diff_pos], new_text_position = diff_pos))
    }
  }
  
  # 多字符修改等复杂场景返回NA
  return(list(new_text = NA_character_, new_text_position = NA_integer_))
}

3. 应用函数生成结果列

使用mapply批量处理每行数据,提取结果并添加到数据框:

diff_results <- mapply(compare_text, df$current_text, df$previous_text, SIMPLIFY = FALSE)
df$new_text <- sapply(diff_results, function(x) x$new_text)
df$new_text_position <- sapply(diff_results, function(x) x$new_text_position)

最终结果

运行代码后,数据框将生成目标列,与示例完全一致:

current_text previous_text new_text new_text_position
1        thank          <NA>     <NA>                NA
2       thanks         thank        s                 6
3        thank        thanks [DELETE]                NA
4       thdank         thank        d                 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:07:07