簡體   English   中英

R:根據另一個data.table有效地從data.table中選擇指定的行?

[英]R: efficiently select specified rows from a data.table according to another data.table?

我有一個名為dt的data.table,另一個名為sg的data.table,在這里,我想根據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嗎?

謝謝。

您可以使用主鍵進行適當的左聯接:

> setkey(dt, colA, colB)
> setkey(sg, colA, colB)
> dt[!sg]
   colA colB colC
1:    2   20    A
2:    2   20    A

這應該更加有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM