簡體   English   中英

使用另一個data.table子集data.table

[英]Subsetting a data.table using another data.table

我有dtdt1 data.table s。

dt<-data.table(id=c(rep(2, 3), rep(4, 2)), year=c(2005:2007, 2005:2006), event=c(1,0,0,0,1))
dt1<-data.table(id=rep(2, 5), year=c(2005:2009), performance=(1000:1004))

dt

   id year event
1:  2 2005     1
2:  2 2006     0
3:  2 2007     0
4:  4 2005     0
5:  4 2006     1

dt1

   id year performance
1:  2 2005        1000
2:  2 2006        1001
3:  2 2007        1002
4:  2 2008        1003
5:  2 2009        1004

我想使用也出現在dt1第一列和第二列的組合來對前者進行子集化。 因此,我想創建一個沒有覆蓋dt的新對象。 這是我想要獲得的。

   id year event
1:  2 2005     1
2:  2 2006     0
3:  2 2007     0

我嘗試使用以下代碼執行此操作:

dt.sub<-dt[dt[,c(1:2)] %in% dt1[,c(1:2)],]

但它不起作用。 結果,我得到了一個與dt相同的數據表。 我認為我的代碼中至少有兩個錯誤。 首先,我可能使用錯誤的方法按列對data.table進行子集化。 第二個,非常明顯的是, %in%適用於向量而不適用於多列對象。 無可奈何,我無法找到更有效的方法來做到這一點......

預先感謝您的幫助!

setkeyv(dt,c('id','year'))
setkeyv(dt1,c('id','year'))
dt[dt1,nomatch=0]

輸出 -

> dt[dt1,nomatch=0]
   id year event performance
1:  2 2005     1        1000
2:  2 2006     0        1001
3:  2 2007     0        1002

使用merge

merge(dt,dt1, by=c("year","id"))
   year id event performance
1: 2005  2     1        1000
2: 2006  2     0        1001
3: 2007  2     0        1002

暫無
暫無

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

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