我想根据colC
提取指定的行,该行应由groud by = list(colA, colB)
包含不同的元素。这是我的代码:
dt <- data.table(colA = c(1, 1, 1, 2, 2, 3, 3),
colB = c(10, 10, 10, 20, 20, 30, 30),
colC = c("A", "I", "A", "A", "A", "I", "A"))
dt
sg <- dt[, length(unique(colC)) != 1, by = list(colA, colB)]
sg
sg <- sg[sg[, V1]]
sg
> dt
colA colB colC
1: 1 10 A
2: 1 10 I
3: 1 10 A
4: 2 20 A
5: 2 20 A
6: 3 30 I
7: 3 30 A
> sg
colA colB V1
1: 1 10 TRUE
2: 2 20 FALSE
3: 3 30 TRUE
> sg
colA colB V1
1: 1 10 TRUE
2: 3 30 TRUE
在这里,最后一个
sg
是我想要的,但是当样本数量很大时,length(unique(colC)) != 1
会很慢。您能帮忙解决如何加快我的操作速度,或更好的方法来完成我想要的吗?
谢谢。
最佳答案
在这里,@ Arun给出了更好的答案。这十分完美!谢谢。sg <- unique(dt)[, .N != 1L, by=.(colA, colB)][(V1)]