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

如何在R语言中保留每段重复值序列的首个值

保留连续重复序列首个值的解决方法

你之前的代码df %>% group_by(x) %>% slice_head(n = 1)不符合需求,是因为它把所有值相同的行归为同一组,只会保留每个x值第一次出现的那一行,无法识别连续重复的序列块。要实现保留每段连续重复序列的首个值,可通过以下几种方式解决:

方法一:使用dplyr的consecutive_id(dplyr 1.1.0及以上版本)

利用consecutive_id()为每段连续相同的x生成唯一分组ID,再提取每组第一行:

library(dplyr)

result <- df %>%
  group_by(consecutive_id(x)) %>%
  slice_head(n = 1) %>%
  ungroup() %>%
  select(-consecutive_id(x))

print(result)

方法二:使用data.table的rleid(兼容旧版dplyr)

如果你的dplyr版本较低,可借助data.table包的rleid()函数实现相同分组逻辑:

library(dplyr)
library(data.table)

result <- df %>%
  group_by(rleid(x)) %>%
  slice_head(n = 1) %>%
  ungroup() %>%
  select(-rleid(x))

print(result)

方法三:直接过滤(无需分组)

通过比较当前行与上一行的x值,保留x发生变化的行(包含第一行):

library(dplyr)

result <- df %>%
  filter(x != lag(x, default = x[1] - 1))

print(result)

以上三种方法运行后都会得到你期望的结果:

x y
1 2 1
2 3 1
3 1 1
4 5 1
5 2 1
6 1 1
7 3 1

内容的提问来源于stack exchange,提问作者Martyna F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:35:15