R:使用另一个data.table中的值查找data.table中的所有观察结果

时间:2014-03-14 08:45:08

标签: r data.table

我在R中有两个数据表:DT1有大约30K的5个变量:userIDuserNameproductIDproductName,{{ 1}},usersRate仅对500个变量进行500次观察:DT2productID。我想查找来自similarProductID的所有行,DT1与DT2中的productID相同。我已经尝试了similarProductIDDT1[which(DT1$productID==DT2$similarProductID)],但它没有成功,我收到的观察太少了。任何想法我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

最快的方式是加入:

#mock data
DT1<-data.table(userID=1:30000,userName=sample(LETTERS,30000,T),productID=30001:60000,productName=sample(LETTERS,30000,T),userRate=runif(30000))
DT2<-data.table(productID=1:500,similarProductId=sample(30001:60000,500))

#set keys
setkey(DT1,productID)
setkey(DT2,similarProductId)

#join
DT1[DT2]

   productID userID userName productName   userRate productID.1
1:     30014     14        L           R 0.87649196         473
2:     30025     25        E           A 0.02237395         326
3:     30027     27        H           Z 0.43986360         198
4:     30065     65        V           K 0.33047666         240
5:     30123    123        R           X 0.38637559         210
---                                                             
  496:     59575  29575        U           A 0.41036652         214
497:     59665  29665        C           E 0.67345907          45
498:     59724  29724        F           Y 0.18853101          81
499:     59764  29764        D           X 0.50271854         386
500:     59790  29790        Z           A 0.02222698         397

答案 1 :(得分:0)

我怀疑这种方式会比Troy的加入答案更快,但您可以使用R中的合并功能。

  DT1<-data.frame(userID=1:30000,userName=sample(LETTERS,30000,T),productID=30001:60000,productName=sample(LETTERS,30000,T),userRate=runif(30000))
  DT2<-data.frame(productID=sample(30001:60000,500), similarproductID=sample(30001:60000,500))

  colnames(DT2)<-c("BadproductID","productID") #Do this to match the colname in DT1

  DTMerged<-merge(DT1,DT2, by="productID") #Should give you all your matches without NA's