如何在R中基于element列的x-y-z模式分组拼接字符串?
解决方法
1. 构造示例数据
先还原你的示例DataFrame:
library(dplyr) library(stringr) df <- tibble( element = c("x", "y", "z", "z", "x", "y", "z", "x", "y", "z", "z", "z", "x", "y", "z", "z", "z"), string = c("abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yza", "bcd", "efg", "hij", "klm", "nop", "qrs", "tuv", "wxy") )
2. 核心实现代码
利用分组标识+聚合拼接的思路,完美适配z数量不固定的情况:
result <- df %>% # 生成分组ID:每遇到一个x,组号递增 mutate(group_id = cumsum(element == "x")) %>% # 按分组ID聚合 group_by(group_id) %>% # 拼接同组的string为空格分隔的字符串 summarize(string = str_c(string, collapse = " ")) %>% # 移除临时的group_id列 select(-group_id) print(result)
3. 代码说明
cumsum(element == "x"):通过累加x的出现次数生成分组ID,每个x开头的组(包含后续的y和所有z)会被分配同一个ID,自动处理z数量不固定的问题;str_c(string, collapse = " "):在分组内将所有string值用空格拼接成单个字符串;- 整个过程不需要
rowwise,分组聚合的方式更高效且逻辑清晰。
运行后会得到你需要的结果:
# A tibble: 4 × 1 string <chr> 1 abc def ghi jkl 2 mno pqr stu 3 vwx yza bcd efg hij 4 klm nop qrs tuv wxy
内容的提问来源于stack exchange,提问作者BleepBloop
相关产品推荐
相关产品推荐

