在R语言中将下一行下划线后内容追加到当前行,统一字符串后缀
解决R语言字符串拼接问题
给定如下向量:
x <- c("Q9NZ", "Q69Z_1036_1037_1_1_S1036", "A3K8", "P123_567_789_1_1_T567")
要实现将奇数位置的字符串拼接上其下一行字符串中_及后续内容,偶数位置字符串保持不变,可通过以下两种方法处理:
方法一:向量化直接处理
# 提取对应位置的后缀:第1行取第2行的后缀,第3行取第4行的后缀 suffixes <- sub("^[^_]+", "", x[c(2, 4, NA, NA)]) # 对奇数行执行拼接,偶数行直接保留原内容 result <- ifelse(seq_along(x) %% 2 == 1, paste0(x, suffixes), x) # 输出结果 result #> [1] "Q9NZ_1036_1037_1_1_S1036" "Q69Z_1036_1037_1_1_S1036" #> [3] "A3K8_567_789_1_1_T567" "P123_567_789_1_1_T567"
方法二:分组处理(适配更多成对数据场景)
如果数据是按两两一组的规律排列,可先分组再操作:
# 将向量按每2个元素分为一组 groups <- split(x, ceiling(seq_along(x)/2)) # 遍历每组完成拼接 result <- unlist(lapply(groups, function(group) { # 提取组内第二个元素的下划线及后续内容 suffix <- sub("^[^_]+", "", group[2]) # 返回拼接后的第一个元素 + 原第二个元素 c(paste0(group[1], suffix), group[2]) }))
关键正则说明
sub("^[^_]+", "", str) 的作用:
^[^_]+:匹配字符串开头到第一个_之前的所有字符([^_]表示非下划线字符,+表示匹配一次或多次)- 用空字符串替换这部分内容,最终得到第一个
_及之后的所有内容
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

