r语言 - 如何删除所有连续的数据,但只保留第一行



参考这个问题:R -删除连续(ONLY)重复我使用相同的公式:

df[c(df$x[-1] != df$x[-nrow(df)],TRUE),]

但是我只有最后一个值,我想要第一个,我怎么能改变这一点?谢谢你!

这里有几个选项。

首先,您可以使用rle来获取连续值的索引。若要在一系列连续数字中保留第一个值,则从索引为1开始,将其他索引累加。

lens <- rle(df$x)$lengths
df[cumsum(c(1, lens[-length(lens)])), ]

作为一种选择,使用tidyverse,您可以在x中按行创建不同的组。您可以保留每组中的第一个值。

library(dplyr)
df %>%
group_by(grp = c(T, diff(x) != 0)) %>%
filter(grp) %>%
ungroup %>%
select(-grp)

对于data.table,您可以使用rleid(生成运行长度类型组id的函数)。副本为FALSE。保留不是的行。FALSE允许在重复中保留第一行。

library(data.table)
setDT(df)[!duplicated(rleid(x))]

最新更新