我想根据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)]

10-08 02:55