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

在R中按ptnt分组,拼接列中去除连续重复后的行值序列

解决方法

你的问题出在unique(col)会直接去除所有重复值,不管它们是不是连续出现的,所以只能得到三个唯一值的拼接结果。要实现保留元素出现顺序,仅合并连续重复项的需求,可以用rle()函数处理连续重复的序列,再拼接成目标字符串。

以下是两种可行的dplyr实现方式:

方式一:直接在分组内生成目标列

library(dplyr)

df <- data.frame(col = c("aa", "bb", "cc", "aa", "aa", "bb","bb","bb"),
                 ptnt = c("a","a","a","a","a","a","a","a"))

df <- df %>%
  group_by(ptnt) %>%
  mutate(output = paste0(rle(col)$values, collapse = "-")) %>%
  ungroup()

rle(col)会识别col中连续重复的元素,返回的$values就是去重连续重复后的有序元素列表,用paste0(..., collapse="-")就能拼接成你需要的aa-bb-cc-aa-bb。

方式二:先汇总再合并回原数据框(适合多分组场景)

如果需要先单独生成每个分组的结果再合并,可使用summarise配合left_join:

library(dplyr)
library(stringr) # 用str_c也可以,和paste0效果一致

grouped_result <- df %>%
  group_by(ptnt) %>%
  summarise(output = str_c(rle(col)$values, collapse = "-"))

df <- df %>% left_join(grouped_result, by = "ptnt")

运行后df的output列就会全部显示aa-bb-cc-aa-bb,符合你的预期。

内容的提问来源于stack exchange,提问作者Statistics Tutorial

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:29