In a data.table remove identical consecutive values over certain times by group

Sur*_*ren 4 r data.table

在中data.table,如果某个列具有相同的值并连续出现多次,那么我想删除相应的行。我也想按小组这样做。

例如,说dt是我的data.table。如果同一值在Petal.Width分组中连续2次连续出现,我想删除行Species

dt <- iris[c(1:3, 7:7, 51:53, 62:63), ]
setDT(dt)
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 1           5.1         3.5          1.4         0.2     setosa
# 2           4.9         3.0          1.4         0.2     setosa
# 3           4.7         3.2          1.3         0.2     setosa
# 7           4.6         3.4          1.4         0.3     setosa
# 51          7.0         3.2          4.7         1.4 versicolor
# 52          6.4         3.2          4.5         1.5 versicolor
# 53          6.9         3.1          4.9         1.5 versicolor
# 62          5.9         3.0          4.2         1.5 versicolor
# 63          6.0         2.2          4.0         1.0 versicolor
Run Code Online (Sandbox Code Playgroud)

期望的结果是带有以下行的data.table。

# 7           4.6         3.4          1.4         0.3     setosa
# 51          7.0         3.2          4.7         1.4 versicolor
# 63          6.0         2.2          4.0         1.0 versicolor
Run Code Online (Sandbox Code Playgroud)

chi*_*n12 5

这是一个选项:

library(data.table)
setDT(dt)[dt[,{
    rl <- rleid(Species, Petal.Width)
    rw <- rowid(rl)
    .I[!rl %in% rl[rw > 1]]
}]]
Run Code Online (Sandbox Code Playgroud)

输出:

   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1:          4.6         3.4          1.4         0.3     setosa
2:          7.0         3.2          4.7         1.4 versicolor
3:          6.0         2.2          4.0         1.0 versicolor
Run Code Online (Sandbox Code Playgroud)