В момента се опитвам да свържа няколко кадри с данни с първичен ключ (т.е. 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>
Което ми създава два проблема:
„Дублирани“ записи за идентификатори 2 и 3
Премахвания на идентификатори 9 и 10, за които няма съвпадение в DF1 или DF2
Re. проблем 1, осъзнавам, че R работи правилно, като създавам всички възможни комбинации от данните, когато правя left_join.
Това ме кара да подозирам, че трябва да използвам reshape или cast, за да премахна тези дублиращи се идентификатори от DF2 и DF3, преди да се присъединя към тях. По-конкретно, V3 (досадната допълнителна такса). Въпреки това, аз съм сравнително нов в R и донякъде съм на загуба как да кодирам това
Ако някой има някакви предложения, ще съм много благодарен
DF2
? Този сV3
== 2 илиsurcharge
? Какви са валидните/невалидните стойности за колоните, които биха били правила за филтриране на различни редове? Трябва да го дефинирате, преди да можете да направите нещо друго, което си струва да направите с тези данни. - person hrbrmstr   schedule 17.01.2017