如何在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
相关产品推荐
相关产品推荐

