나는 "소유자"라고하는 제휴 자와 날짜가있는 전자 메일 목록을 받아서 날짜와 값이있는 수신 오더와 비교합니다. 일치하는 키는 이메일이지만 가장 가까운 날짜에 일치하는 것을 원합니다. 이메일 주소에 2 명의 다른 소유자가있는 경우도 있습니다.가장 가까운 날짜를 기준으로 매핑
재현 예 :
require(dplyr)
e <- c("[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]")
d <- c("2017-01-01", "2017-04-05", "2017-04-12", "2017-05-05", "2017-08-05", "2017-12-05")
p <- c("Jeff", "Sam", "Sam", "Jeff", "Matt", "Matt")
df <- data_frame(e, d, p) %>% mutate(d=as.Date(d))
o <- c("[email protected]", "[email protected]", "[email protected]", "[email protected]")
d2 <- c("2017-02-02", "2017-04-28", "2017-05-05", "2017-07-01")
a <- c(600.50, 3000, 4999.99, 2050.6)
df2 <- data_frame(o, d2, a) %>% mutate(d2 = as.Date(d2))
첫 DF 이메일 주소의지도 p
사람이 소유하고있다. df2
은 해당 전자 메일 주소와 함께 제공된 주문이며 및에 할당 된 해당 전자 메일 주소를 가진 사람이 올바른 "소유자"를 핀으로 연결하는 df2
에 열을 추가하고 싶습니다.
원하는 결과는 :
> df2
# A tibble: 4 x 3
o d2 a newowner
<chr> <date> <dbl> <char>
1 [email protected] 2017-02-02 600.50 "Jeff"
2 [email protected] 2017-04-28 3000.00 "Sam"
3 [email protected] 2017-05-05 4999.99 NA
4 [email protected] 2017-07-01 2050.60 "Jeff"
현재는 엄청난 문제가되지 않습니다 - "소유"이메일 주소의 70K 기록에서, 복제 만 ~ 86가지 경우가 있습니다. 그러나 소유권이 올해의 마지막 몇 달 동안 변하고 있으므로 소유권이 이동하면 많은 중복을 초래할 수 있습니다. 나는 현재 가장 먼 곳에서 주인을 데리고 있고, 그 86 명의 다른 사람들을 덮어 쓰고 있습니다.
도움 주셔서 감사합니다.
Nice - 내 마음이 자연스럽게가는 곳이라고 생각합니다. 조인을 롤링하는 방법에 대해 더 자세히 알아야합니다. 슬라이스는 정상적으로 무엇을합니까? 나는 오름차순으로 정렬 한 후 첫 번째 것을 잡을 필터 (! duplicated (e))로 슬라이스를 바꿨을 것이다. Date_ABS_Diff –
@MattW. slice는 위치별로 행을 선택합니다. 다음 문서를 참조하십시오. https://www.rdocumentation.org/packages/dplyr/versions/0.7.3/topics/slice – www
아, 완벽합니다. 매우 감사합니다!새로운 것을 배웠습니다. –