R:在data.table中按组高效提取指定列中不同元素的行
R: Efficiently extract rows with different element in specified column by group in 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
就慢了。
你能帮我想出如何加快我的操作或更好的方法来完成我想要的吗?
谢谢。
这里,@Arun给出了更好的答案。这十分完美!谢谢
sg <- unique(dt)[, .N != 1L, by=.(colA, colB)][(V1)]
我想根据 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
就慢了。
你能帮我想出如何加快我的操作或更好的方法来完成我想要的吗?
谢谢。
这里,@Arun给出了更好的答案。这十分完美!谢谢
sg <- unique(dt)[, .N != 1L, by=.(colA, colB)][(V1)]