2017-03-31 1 views
0

저는 R에 특히 익숙하며 특히 data.table에 익숙합니다. 다음과 같이 붙어 있습니다.두 번째 data.table에 기초한 필터링은 다음과 같은 명령을 사용하여 필터링합니다.

"Canteen"및 "Saladconsumer"와 같이 2 개의 데이터 테이블이 있습니다. data.table "Canteen"에는 모든 사람의 ID, 날짜, 시간 및 구입 항목이 포함되어 있습니다.

두 번째 data.table "Saladconsumer"는 샐러드를 구입 한 사람의 ID, 날짜 및 시간을 포함하며 기본적으로 "캔틴"의 하위 집합입니다.

이제 "샐러드 캔더"를 "캔틴"으로 필터링하여 그 날 샐러드를 사 먹은 사람들을 만나서 매점에서 다른 구매를 한 것입니다. 따라서 필터링에는 부정합이 포함되어야합니다 : 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

네, 그게 내가 원하는거야 !! 결과에서 나는 단지 샐러드 소비자가 오늘의 두 번째 구매를 가지고있다! 코딩을 초기화 해주십시오. 나는 매우 감사 할 것입니다! –

관련 문제