我想根据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
很慢。
你能帮忙找出如何加快我的操作或更好的方法来完成我想要的工作吗?
谢谢。
答案 0 :(得分:4)
在这里,@ Arun给出了更好的答案。这十分完美!感谢。
sg <- unique(dt)[, .N != 1L, by=.(colA, colB)][(V1)]