如果值在两个后续行中重复,则删除它们

时间:2014-08-08 09:20:43

标签: r

我有一个数据框

dat <- data.frame(time = c(24.83,25.24,25.46,25.71,25.78,26.11), key = c("z","f","x","f","f","x"))

看起来像这样:

time    key
24.83   z
25.24   f
25.46   x
25.71   f
25.78   f
26.11   x

我想找到&#39; key&#39;的所有实例。两个后续行中相同(例如&#39; f&#39;此处)并删除第二行。

我看着?重复且独特但仍然不知道如何将其用于此目的。

2 个答案:

答案 0 :(得分:2)

duplicatedunique可能不是最佳选择 - 默认情况下会删除所有后续重复项。

相反,您可以使用rle,如下所示:

> dat[sequence(rle(as.character(dat$key))$lengths) == 1, ]
   time key
1 24.83   z
2 25.24   f
3 25.46   x
4 25.71   f
6 26.11   x

rle返回list项,其中包含两项:lengths(表示运行长度)和values

答案 1 :(得分:1)

这是一个diff有效的解决方案:

dat[-(which(diff(as.numeric(dat$key))==0)+1),]

   time key
1 24.83   z
2 25.24   f
3 25.46   x
4 25.71   f
6 26.11   x