J'ai deux dfComment joindre des dataframes conditionnellement sur des paires de colonnes?
d1 <- data_frame(name=c('Mike','Carl','Joe', 'Mike'),
id=c(1,2,NA,1),
id2=c('a',NA,'c','a'),
dateT=as.Date('2017-05-01','2017-05-01','2017-05-01','2016-05-01'))
# A tibble: 4 x 4
name id id2 dateT
<chr> <dbl> <chr> <date>
1 Mike 1 a 2017-05-01
2 Carl 2 <NA> 2017-05-01
3 Joe NA c 2017-05-01
4 Mike 1 a 2016-05-01
d2 <- data_frame(value=c(T, T, F, T,F),
id=c(1,2,3,1,4),
id2=c('a','b','c','a','d'),
dateT=as.Date('2017-05-01','2017-05-01','2017-05-01', '2016-05-01','2016-05-01'))
# A tibble: 5 x 4
value id id2 dateT
<lgl> <dbl> <chr> <date>
1 TRUE 1 a 2017-05-01
2 TRUE 2 b 2017-05-01
3 FALSE 3 c 2017-05-01
4 TRUE 1 a 2016-05-01
5 FALSE 4 d 2016-05-01
Et je suis en train de rejoindre d2
avec d1
base paires dateT
et id
oudate
et id2
dépend sur lequel est disponible. Finalement, je voudrais avoir tous les enregistrements de d2 (qu'ils soient ou non assortis), et joint toutes les colonnes de d1 qui ont une correspondance sur d2.
Ce que j'ai à ce jour est
d2 %>%
inner_join(d1, by=c('id'='id', 'dateT'='dateT'))
# A tibble: 5 x 6
value id id2.x dateT name id2.y
<lgl> <dbl> <chr> <date> <chr> <chr>
1 TRUE 1 a 2017-05-01 Mike a
2 TRUE 2 b 2017-05-01 Carl <NA>
3 FALSE 3 c 2017-05-01 <NA> <NA>
4 TRUE 1 a 2016-05-01 Mike a
5 FALSE 4 d 2016-05-01 <NA> <NA>
Il y a deux questions:
je préférerais joindre que
name
ded1
, puisque dans mon casid2.y
est toujours va être un sous-ensembleid2.x
(Je veux garder seulementid2.x
car il sera toujours le plus complet). Je sais que je peux laisser tomber les colonnes plus tard, mais je me demandais si dplyr avait une fonctionnalité qui ne garderait que les colonnes de la première image en présence de noms de colonne dupliquésJe ne sais pas comment regarder conditionnellement
id2
quandis.na(id)==T
La sortie attendue ressemblerait à ceci:
# A tibble: 5 x 6
value id id2 dateT name
<lgl> <dbl> <chr> <date> <chr>
1 TRUE 1 a 2017-05-01 Mike
2 TRUE 2 b 2017-05-01 Carl
3 FALSE 3 c 2017-05-01 Joe
4 TRUE 1 a 2016-05-01 Mike
5 FALSE 4 d 2016-05-01 <NA>
Pouvez-vous s'il vous plaît publier votre sortie attendue? – Sotos
@Sotos sortie ajoutée, désolé – Dambo