Аналогично этот вопрос, но в R. Full-Join добавляет повторяющиеся значения при определенных обстоятельствах, а именно одна таблица имеет повторяющееся значение в столбце «по», а другая таблица - нет.
> df1 = data.frame(A=c(1,2,2,3), B=letters[1:4])
> df2 = data.frame(A=c(2,3,3,3), C=LETTERS[1:4])
> full_join(df1, df2, by="A") %>% arrange(A) %>% select(A,B,C)
A B C
1 1 a <NA>
2 2 b A
3 2 c A
4 3 d B
5 3 d C
6 3 d D
Вот приложение, где это неприятная проблема.У меня есть две бухгалтерские книги с транзакциями по дате.Каждая учетная запись имеет даты с несколькими транзакциями.Если я попытаюсь объединить бухгалтерские книги, они будут полностью испорчены.
acct1 = data.frame(
Date=as.Date(c("2019/1/1", "2019/1/2", "2019/1/2", "2019/1/3")),
Amount=c(10, -20, -1, 25)
)
acct1
#> Date Amount
#> 1 2019-01-01 10
#> 2 2019-01-02 -20
#> 3 2019-01-02 -1
#> 4 2019-01-03 25
acct2 = data.frame(
Date=as.Date(c("2019/1/2", "2019/1/3", "2019/1/3", "2019/1/3")),
Amount=c(7, 0, -7, 0)
)
acct2
#> Date Amount
#> 1 2019-01-02 7
#> 2 2019-01-03 0
#> 3 2019-01-03 -7
#> 4 2019-01-03 0
dplyr::full_join(acct1, acct2, by="Date", suffix=c(".ACCT1", ".ACCT2"))
#> Date Amount.ACCT1 Amount.ACCT2
#> 1 2019-01-01 10 NA
#> 2 2019-01-02 -20 7
#> 3 2019-01-02 -1 7
#> 4 2019-01-03 25 0
#> 5 2019-01-03 25 -7
#> 6 2019-01-03 25 0
Создано в 2019-06-17 пакетом Представить (v0.3.0)
Редактировать
Я только что нашел этот вопрос, и он может иметь решение.
Работает
acct1 = data.frame(
Date=as.Date(c("2019/1/1", "2019/1/2", "2019/1/2", "2019/1/3")),
Amount=c(10, -20, -1, 25)
)
acct1 = acct1 %>% mutate(rownum=row_number())
#> Error in acct1 %>% mutate(rownum = row_number()): could not find function "%>%"
acct1
#> Date Amount
#> 1 2019-01-01 10
#> 2 2019-01-02 -20
#> 3 2019-01-02 -1
#> 4 2019-01-03 25
acct2 = data.frame(
Date=as.Date(c("2019/1/2", "2019/1/3", "2019/1/3", "2019/1/3")),
Amount=c(7, 0, -7, 0)
)
acct2 = acct2 %>% mutate(rownum=row_number())
#> Error in acct2 %>% mutate(rownum = row_number()): could not find function "%>%"
acct2
#> Date Amount
#> 1 2019-01-02 7
#> 2 2019-01-03 0
#> 3 2019-01-03 -7
#> 4 2019-01-03 0
dplyr::full_join(acct1, acct2, by=c("rownum", "Date"), suffix=c(".ACCT1", ".ACCT2")) %>%
select(-rownum) %>%
arrange(Date)
#> Date Amount.ACCT1 Amount.ACCT2
#> 1 2019-01-01 10 NA
#> 2 2019-01-02 -20 NA
#> 3 2019-01-02 -1 NA
#> 4 2019-01-02 NA 7
#> 5 2019-01-03 25 0
#> 6 2019-01-03 NA 0
#> 7 2019-01-03 NA -7
Создано в 2019-06-17 пакетом Представление (v0.3.0)