sheet - tidyr r
¿Hay un método R dplyr para fusionar con all=TRUE? (2)
La versión más reciente de dplyr
(0.4.0) ahora tiene una opción full_join, que es lo que creo que quieres.
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)
Devoluciones
> merge(cost, trees, all=TRUE)
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
Y
library(dplyr)
full_join(cost, trees)
Devoluciones
> 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
Tengo dos marcos de datos R que quiero fusionar. En recta R puedes hacer:
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)
que produce:
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
Estoy usando dplyr
, y preferiría una solución como:
left_join(cost, trees)
que produce algo cercano a lo que quiero:
farm cost trees
1 farm A 10 20
2 office 100 NA
En dplyr
puedo ver left_join
, inner_join
, semi_join
y anti-join
, pero ninguno de estos hace lo que merge
con all=TRUE
.
Además, ¿hay una manera rápida de establecer las NA en 0? Mis esfuerzos hasta ahora usando x$trees[is.na(x$trees)] <- 0;
son laboriosos (necesito un comando por columna) y no siempre parecen funcionar.
Gracias
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