在中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)
这是一个选项:
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)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |