R语言比对主字符串与字符串列表 将差异字符转为小写
R语言逐位置比对字符串的大小写转换实现
实现思路
- 先将主字符串拆分为按位置索引的单字符向量,作为比对基准
- 逐个处理字符串列表中的元素:同样拆分为单字符向量,先校验长度和主字符串一致,避免位置错位
- 逐位置做字符匹配:如果当前位置字符和主字符串对应位置字符完全一致,保留该字符原有大小写;如果不一致,将该位置字符转换为小写
- 将处理完成的单字符向量重新拼接为完整字符串,汇总所有结果返回
可运行代码
compare_and_convert <- function(master_str, target_strs) { # 拆分主字符串为单字符基准向量 master_chars <- strsplit(master_str, "")[[1]] n_master <- length(master_chars) vapply(target_strs, function(target) { target_chars <- strsplit(target, "")[[1]] # 长度异常处理 if (length(target_chars) != n_master) { warning(paste0("字符串`", target, "`长度与主字符串不一致,返回NA")) return(NA_character_) } # 逐位置比对转换 res_chars <- ifelse( target_chars == master_chars, target_chars, tolower(target_chars) ) # 拼接为完整字符串 paste(res_chars, collapse = "") }, FUN.VALUE = character(1), USE.NAMES = FALSE) }
效果验证
对应给出的示例运行结果如下:
# 示例1 master <- "AGG" test_list1 <- c("ATT", "AGT") compare_and_convert(master, test_list1) # > [1] "Att" "AGt" # 示例2 test_list2 <- c("GGA") compare_and_convert(master, test_list2) # > [1] "gGa"
如果需要忽略主字符串本身的大小写做匹配(比如主串为小写"agg"时也认为"A"和首字符匹配),只需要把比对条件修改为
toupper(target_chars) == toupper(master_chars)即可,其余逻辑不变。
内容的提问来源于stack exchange,提问作者Ana Fsshaie
相关产品推荐
相关产品推荐

