r - 过滤重复的行序列
问题描述
(请注意,我很惊讶没有找到类似的问题,但如果我弄错了,我很乐意删除这个问题)。
我有以下示例数据集。
library(data.table)
dt <- data.table(val = c(1, 2, 3, 0, 2, 4, 1, 2, 3), id = c(1, 1, 1, 2, 2, 2, 3, 3, 3))
id=1 的组与 id=3 的组具有相同的 val (1,2,3) 值。我想过滤掉组 id=3 中的这个“重复”值。
我想要的输出是:
> dt
val id
1: 1 1
2: 2 1
3: 3 1
4: 0 2
5: 2 2
6: 4 2
我只是想出了一些肮脏的解决方法,比如取 sum:dt[, filter:= sum(val) , by = id]
并删除重复项,但是 id = 2 的值也会消失。
注意:如果 id=3 的值为 1,3,2(因此值相同但顺序不同,则不应删除行),..所以顺序很重要。
解决方案
这不是特定于 data.table 的方法,但它会起作用:
x = split(dt$val, dt$id)
dt[!id %in% names(x[duplicated(x)])]
# val id
#1: 1 1
#2: 2 1
#3: 3 1
#4: 0 2
#5: 2 2
#6: 4 2
就效率而言,它可能不是最佳的。