R:在data.table中按组在指定的列中有效地提取具有不同元素的行

时间:2015-02-18 15:08:07

标签: r data.table

我想根据colC提取指定的行,其中应包含不同的元素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很慢。

你能帮忙找出如何加快我的操作或更好的方法来完成我想要的工作吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

在这里,@ Arun给出了更好的答案。这十分完美!感谢。

sg <- unique(dt)[, .N != 1L, by=.(colA, colB)][(V1)]