【发布时间】:2015-02-18 01:27:55
【问题描述】:
我有一个叫dt的data.table,还有一个叫sg,这里我要根据sg选择dt的子集。这意味着在dt 中,选定的行(colA 和colB)不应等于sg 行(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 <- data.table(colA = c(1, 3), colB = c(10, 30))
sg
dt2 <- paste(dt[, colA], dt[, colB], sep = "-")
sg2 <- paste(sg[, colA], sg[, colB], sep = "-")
dt[!(dt2 %in% sg2)]
# OR the following one
# dt[!((dt[, colA] %in% sg[, colA]) & (dt[, colB] %in% sg[, colB]))]
> 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
1: 1 10
2: 3 30
> dt[!(dt2 %in% sg2)]
colA colB colC
1: 2 20 A
2: 2 20 A
但是,当数据集很大时,粘贴操作很慢,你能帮我找出一个有效的方法来替换data.table吗?
谢谢。
【问题讨论】:
标签: r data.table