如何用R语言识别并合并被空字符串分隔的连续字符串块?
解决方案
要实现合并被空字符串分隔的连续非空字符串块,你可以利用分组聚合的思路,通过cumsum生成分组标识,再按组合并字符串,具体代码如下:
# 输入向量 x1 <- c("hello","c1","","","hello","c2","3","","hello","","c1","c2","") # 生成分组标识:每遇到空字符串,分组编号递增 grp <- cumsum(x1 == "") # 筛选非空元素及其对应的分组 non_empty_vals <- x1[x1 != ""] non_empty_grps <- grp[x1 != ""] # 按分组合并字符串,用空格连接 merged_result <- tapply(non_empty_vals, non_empty_grps, paste, collapse = " ") # 去除分组名称,转为纯向量 merged_result <- unname(merged_result) # 查看结果 merged_result
运行后输出与期望完全一致:
[1] "hello c1" "hello c2 3" "hello" "c1 c2"
原有代码问题分析
你之前的for循环方案存在两个核心问题:
- 重复处理元素:循环中每次只对比当前索引和下一个索引,导致相邻元素会被多次合并(比如"c1"既会和"hello"合并,又会被单独输出),产生重复项。
- 无法处理多元素连续块:代码仅考虑了两个相邻元素的情况,当连续非空元素超过2个时(比如"hello","c2","3"),无法一次性合并整个块,只能两两合并后再单独输出最后一个元素。
内容的提问来源于stack exchange,提问作者tony13s
相关产品推荐
相关产品推荐

