在R中根据不同条件实现行值拼接的技术需求
R语言按条件拼接指定行字符串的解决方案
需求说明
根据Flag列标记处理数据框:
- 标记为0的行直接保留
- 以B开头、E结尾的段落(中间可包含任意1标记行),需将段落内(含B、E)的
Strings按顺序拼接,仅保留拼接后的B行,删除段落内的1和E行
示例数据
set.seed(128) df2 <- data.frame(Strings = sample(letters, 17, replace = T), Flag = c(0,"B",1,1,"E","B","E","B","E",0,"B",1,1,1,"E",0,0))
解决方案
使用dplyr结合tidyr实现分组拼接,步骤如下:
- 为每个段落/独立行创建分组标识:遇到
B开启新段落组,0标记行单独成组 - 按分组拼接
Strings内容 - 过滤保留需要的行(
0标记行和拼接后的段落起始行)
代码实现:
library(dplyr) library(tidyr) # 创建分组ID:区分独立0行和各B-E段落 df2 <- df2 %>% mutate(group_id = cumsum(Flag == "B" | (Flag == "0" & lag(Flag, default = "") != "0"))) # 分组拼接+过滤整理 result_df <- df2 %>% group_by(group_id) %>% summarise( Result = paste(Strings, collapse = " "), Flag = first(Flag) ) %>% filter(Flag %in% c("0", "B")) %>% select(Result) %>% ungroup() # 查看最终结果 print(result_df)
输出结果
# A tibble: 8 × 1 Result <chr> 1 d 2 r q r v 3 f y 4 u c 5 x 6 h w x t j 7 d 8 j
内容的提问来源于stack exchange,提问作者Xikeck
相关产品推荐
相关产品推荐

