R data.table在多个条件下的子集.

dig*_*eep 6 r data.table

使用以下数据集,如何编写一个data.table调用,该子集对此表进行子集并返回该客户的所有客户ID和相关订单,如果客户购买了SKU 1?

预期结果应该返回一个表格,该表格在该条件下排除cid 3和5,并且匹配sku的客户的每一行== 1.

我因为不知道怎么写"包含"语句而陷入困境,== literal只返回sku的匹配条件...我相信有更好的方法..

library("data.table")    
df<-data.frame(cid=c(1,1,1,1,1,2,2,2,2,2,3,4,5,5,6,6),
    order=c(1,1,1,2,3,4,4,4,5,5,6,7,8,8,9,9),
    sku=c(1,2,3,2,3,1,2,3,1,3,2,1,2,3,1,2))

    dt=as.data.table(df)
Run Code Online (Sandbox Code Playgroud)

Pet*_*ine 9

这类似于之前的答案,但这里的子集以更data.table类似的方式工作.

首先,让我们采取符合我们条件的cids:

matching_cids = dt[sku==1, cid]

%in%运营商允许我们过滤出那些包含在列表中的项目.所以,使用上面的:

dt[cid %in% matching_cids]

或在一条线上:

> dt[cid %in% dt[sku==1, cid]]
     cid order sku
  1:   1     1   1
  2:   1     1   2
  3:   1     1   3
  4:   1     2   2
  5:   1     3   3
  6:   2     4   1
  7:   2     4   2
  8:   2     4   3
  9:   2     5   1
 10:   2     5   3
 11:   4     7   1
 12:   6     9   1
 13:   6     9   2
Run Code Online (Sandbox Code Playgroud)