You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:18:14