2017-03-31 21 views
0

我对R非常新,特别是data.table,我坚持以下。基于第二个data.table与否定过滤命令

我有2个data.tables,说“食堂”和“沙拉消费者”。 data.table“食堂”包含每个人的ID,日期,时间和物品。

第二data.table“Saladconsumer”中包含的谁买了一个沙拉,基本上是“食堂”的一个子集人ID,日期和时间。

现在,我想,这样我得到的已经买在那一天沙拉和当天在食堂做了其他购买人过滤“食堂”的“Saladconsumer”。因此过滤必须包含一个否定:Canteen[, ID]==Saladconsumer[, ID] & Canteen[, date]==Saladconsumer[, date] & Canteen[, time]!=Saladconsumer[, time]

我只找到重叠和合并/连接的例子,如果所有的标准是相同的。这似乎是很简单,但我想不出我的错误是什么...

NewDT<- Canteen[, Canteen[, ID ] == Saladconsumer [, ID ] & Canteen[, date ] == Saladconsumer[, date ] & Canteen[, time ] == Saladconsumer [, time ]] 

这是什么数据的模样,什么结果我在寻找:

Canteen  
ID Date Time 
00b47c5d83a5490e860086eb080f1f50 26.06.14 12:36:29 
00b47c898875483fb9fa0113d334e500 06.01.14 16:28:56 
00b4cb6c666e2b8152174479545fcef2 29.10.14 12:57:16 
00b4cb6c666e2b8152174479545fcef2 29.10.14 17:20:07 
00b64cef0230b7480fc96dfcad9b8394 07.05.14 11:43:34 
00b8b859987af5c89d90130d1206c579 03.01.14 13:35:15 
0205996c0139e0b909903c2ebacb5a77 07.01.14 14:48:13 
0205d25db373084f9bf8d431db8d3f9c 07.01.14 09:10:27 
0205d25db373084f9bf8d431db8d3f9c 07.01.14 13:48:21 
0208cfa78e51231cf30842ea0f8abdf4 10.04.14 10:06:43 

Salad consumer  
ID Date Time 
00b4cb6c666e2b8152174479545fcef2 29.10.14 12:57:16 
0205d25db373084f9bf8d431db8d3f9c 07.01.14 13:48:21 
020e53bd2076a9db4c9770662793602b 04.02.14 10:38:41 
020ed0685aa70b543981cbb6a7f0c737 16.01.14 15:40:02 
020aa996e0f4b6e886a82ce83d406e92 23.01.14 14:23:43 
020ac1d718ff47f5aaa2d684434bae93 30.06.14 13:47:45 
020b20874ae29027ddac149ab3d5a395 09.04.14 09:34:32 

Results  
ID Date Time 
00b4cb6c666e2b8152174479545fcef2 29.10.14 17:20:07 
0205d25db373084f9bf8d431db8d3f9c 07.01.14 09:10:27 
+0

没有,有没有这样的合并命令。您可以合并所有列,创建一个1/0列来指示哪些匹配,然后过滤到相反的。显然,我只能用这些模糊的词汇来解释它,因为你并不愿意提供一个例子。请参阅http://stackoverflow.com/help/how-to-ask – Frank

回答

0

我会邀请你到tidyverse(其中包括包dplyr),并推荐一个左连接,然后是反连接。

我还建议在寻找对数据操作的RStudio小抄:https://www.rstudio.com/resources/cheatsheets/

这应该做的伎俩(虽然我可能有小姐解释你在找什么 - 在这种情况下,我很乐意进一步提供帮助) :

library(tidyverse) 

SaladPeople <- select(Saladconsumer, ID) %>% left_join(Canteen) 

现在你只有食堂的沙拉消费者。如果我知道你在找什么,那么你可以做一个反连接:

yourData <- anti_join(SaladPeople, Saladconsumer) 

或者像一个会做这样的tidyverse:

yourData <- select(Saladconsumer, ID) %>% 
    left_join(Canteen, by="ID") %>% 
    anti_join(Saladconsumer)) 
+0

非常感谢您看看我的问题。不幸的是,我没有收到我期望/期待的结果。我添加了我的数据的子集和所需的结果。也许这会更好一点。 –

+0

O它看起来像我以为你想在同一天购买沙拉的人购买。请尝试编辑的代码。 –

+0

是的,这就是我想要的!在结果中,我只有沙拉消费者第二次购买当天!你可以请重置编码!我会非常感谢! –