J'ai deux trames de données R que je veux fusionner. En R droit, vous pouvez faire:
cost <- data.frame(farm=c('farm A', 'office'), cost=c(10, 100))
trees <- data.frame(farm=c('farm A', 'farm B'), trees=c(20,30))
merge(cost, trees, all=TRUE)
qui produit:
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
J'utilise dplyr
et préférerais une solution telle que:
left_join(cost, trees)
ce qui produit quelque chose de proche de ce que je veux:
farm cost trees
1 farm A 10 20
2 office 100 NA
Dans dplyr
je peux voir left_join
, inner_join
, semi_join
Et anti-join
, Mais rien de tout cela ne fait ce que merge
avec all=TRUE
.
Aussi - existe-t-il un moyen rapide de mettre les NA à 0? Mes efforts jusqu'à présent en utilisant x$trees[is.na(x$trees)] <- 0;
sont laborieux (j'ai besoin d'une commande par colonne) et ne semblent pas toujours fonctionner.
merci
La version la plus récente de dplyr
(0.4.0) a maintenant une option full_join, ce que je crois que vous voulez.
cost <- data.frame(farm=c('farm A', 'office'), cost=c(10, 100))
trees <- data.frame(farm=c('farm A', 'farm B'), trees=c(20,30))
merge(cost, trees, all=TRUE)
Retour
> merge(cost, trees, all=TRUE)
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
Et
library(dplyr)
full_join(cost, trees)
Retour
> full_join(cost, trees)
Joining by: "farm"
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
Warning message:
joining factors with different levels, coercing to character vector
library(plyr)
> dat <- join(cost, trees, type = "full")
Joining by: farm
> dat
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
> dat[is.na(dat)] <- 0
> dat
farm cost trees
1 farm A 10 20
2 office 100 0
3 farm B 0 30