[英]Subsetting a data.table using another data.table
我有dt
和dt1
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.