如何在R语言中提取change列I的索引并匹配current_text对应字符?
解决方案
你可以通过拆分字符串并定位"I"的位置来实现需求,以下是两种可行的方法:
方法一:使用tidyverse工具链
借助dplyr的行处理和stringr的字符串操作,代码逻辑清晰易读:
library(dplyr) library(stringr) # 原始数据框 df <- tibble(current_text = c("A","AB","ABCD","ABZ"), previous_text = c("","A","AB","ABCD"), change = c("I","MI","MMII","MMSD")) # 处理数据 df_processed <- df %>% rowwise() %>% mutate( # 提取change中所有"I"的索引,先存为列表 insertion_idx_list = which(str_split(change, "", simplify = TRUE) == "I"), # 根据索引提取current_text中的字符并拼接 insertion_chars = str_c(str_split(current_text, "", simplify = TRUE)[insertion_idx_list], collapse = "") ) %>% ungroup() %>% # 将索引列表转为逗号分隔的字符串,无索引则留空 mutate( insertion_idx = ifelse(lengths(insertion_idx_list) == 0, "", str_c(insertion_idx_list, collapse = ",")), insertion_idx_list = NULL # 移除临时列 ) print(df_processed)
方法二:使用Base R
无需额外安装包,直接用apply按行处理:
# 原始数据框 df <- data.frame(current_text = c("A","AB","ABCD","ABZ"), previous_text = c("","A","AB","ABCD"), change = c("I","MI","MMII","MMSD"), stringsAsFactors = FALSE) # 计算insertion_idx df$insertion_idx <- apply(df, 1, function(row) { change_chars <- strsplit(row["change"], "")[[1]] idx <- which(change_chars == "I") if (length(idx) == 0) "" else paste(idx, collapse = ",") }) # 计算insertion_chars df$insertion_chars <- apply(df, 1, function(row) { change_chars <- strsplit(row["change"], "")[[1]] idx <- which(change_chars == "I") if (length(idx) == 0) "" else paste(strsplit(row["current_text"], "")[[1]][idx], collapse = "") }) print(df)
两种方法最终都会生成和示例一致的insertion_idx和insertion_chars列,核心逻辑都是:
- 拆分
change字符串为单个字符,定位所有"I"的位置索引 - 用这些索引从
current_text中提取对应字符并拼接
内容的提问来源于stack exchange,提问作者Adam_G
相关产品推荐
相关产品推荐

