R Studio: Дублиране на идентификатори при използване на left_join

В момента се опитвам да свържа няколко кадри с данни с първичен ключ (т.е. ID колона) в R studio

library(dplyr)
library(tidyr)

#DATAFRAME (1)
ID <- c(1, 2, 3, 4, 5, 6, 7, 8)
V1 <- c(9, 3, 6, 7, 1, 5, 8, 3)
V2 <- c(7, 5, 9, 2, NA, 3, 7, NA)
DF1 <- data.frame(ID, V1, V2)

#DATAFRAME (2)
ID <- c(1, 2, 2, 3, 3, 4, 5)
V3 <- c(1, 2, 'surcharge', 2, 'surcharge', 1, 1)
V4 <- c(400, 450, 4, 450, 4, 400, 400)
DF2 <- data.frame(ID, V3, V4)

#DATAFRAME (3)
ID <- c(1, 2, 2, 3, 3, 9, 10)
V5 <- c('credit', 'credit', 'credit', 'credit', 'credit', 'cash', 'cash')
DF3 <- data.frame(ID, V5)

Когато изпълнявам просто left_join на DF1 и DF2:

JoinDF <- left_join(DF1, DF2, by = "ID")

Досега всичко е глупаво

   ID V1 V2        V3  V4
1   1  9  7         1 400
2   2  3  5         2 450
3   2  3  5 surcharge   4
4   3  6  9         2 450
5   3  6  9 surcharge   4
6   4  7  2         1 400
7   5  1 NA         1 400
8   6  5  3      <NA>  NA
9   7  8  7      <NA>  NA
10  8  3 NA      <NA>  NA

Проблемите ми възникват, когато се опитвам да присъединя трети DF (DF3) към новия DF (JoinDF)

JoinDF2 <- left_join(x = JoinDF, y = DF3, by = "ID")


   ID V1 V2        V3 V4.x   V4.y
1   1  9  7         1  400 credit
2   2  3  5         2  450 credit
3   2  3  5         2  450 credit
4   2  3  5 surcharge    4 credit
5   2  3  5 surcharge    4 credit
6   3  6  9         2  450 credit
7   3  6  9         2  450 credit
8   3  6  9 surcharge    4 credit
9   3  6  9 surcharge    4 credit
10  4  7  2         1  400   <NA>
11  5  1 NA         1  400   <NA>
12  6  5  3      <NA>   NA   <NA>
13  7  8  7      <NA>   NA   <NA>
14  8  3 NA      <NA>   NA   <NA>

Което ми създава два проблема:

  1. „Дублирани“ записи за идентификатори 2 и 3

  2. Премахвания на идентификатори 9 и 10, за които няма съвпадение в DF1 или DF2

Re. проблем 1, осъзнавам, че R работи правилно, като създавам всички възможни комбинации от данните, когато правя left_join.

Това ме кара да подозирам, че трябва да използвам reshape или cast, за да премахна тези дублиращи се идентификатори от DF2 и DF3, преди да се присъединя към тях. По-конкретно, V3 (досадната допълнителна такса). Въпреки това, аз съм сравнително нов в R и донякъде съм на загуба как да кодирам това

Ако някой има някакви предложения, ще съм много благодарен


person perkot    schedule 17.01.2017    source източник
comment
да Наистина трябва да вземете някои решения. Кои 2 искаш от DF2? Този с V3 == 2 или surcharge? Какви са валидните/невалидните стойности за колоните, които биха били правила за филтриране на различни редове? Трябва да го дефинирате, преди да можете да направите нещо друго, което си струва да направите с тези данни.   -  person hrbrmstr    schedule 17.01.2017
comment
Бих искал да запазя и двете. Що се отнася до V3 и V4, тъй като се отнася за моя комплект от реалния живот, V3_2 представлява цената на артикула, V3_surcharge представлява допълнителна такса за кредитна карта, която ще се прилага само в някои случаи. Следователно „дубликатите“ винаги представляват такса за кредитна карта. Потенциално бих могъл да добавя допълнителната такса към цената на артикула. Това би бил един от начините за поддържане на един ID. Би било хубаво да има допълнителна колона, показваща къде има допълнителна такса   -  person perkot    schedule 17.01.2017