Czy istnieje metoda r dplyr dla merge with all = TRUE?

Mam dwa ramki danych R, które chcę połączyć. W prostym R można zrobić:

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)

Który daje:

    farm cost trees
1 farm A   10    20
2 office  100    NA
3 farm B   NA    30

Używam dplyr i wolałabym rozwiązanie takie jak:

left_join(cost, trees)

Który produkuje coś zbliżonego do tego, czego chcę:

    farm cost trees
1 farm A   10    20
2 office  100    NA

W dplyr widzęleft_join, inner_join, semi_join i anti-join, ale żaden z nich nie robi tego, co merge z all=TRUE robi.

Również - czy istnieje szybki sposób, aby ustawić NAs na 0? Moje dotychczasowe wysiłki przy użyciu x$trees[is.na(x$trees)] <- 0; są pracochłonne (potrzebuję polecenia na kolumnę) i nie zawsze wydają się działać.

Dzięki

Author: Racing Tadpole, 2014-02-18

2 answers

Najnowsza wersja dplyr (0.4.0) ma teraz opcję full_join, która jest tym, co wierzę, że chcesz.

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)

Zwraca

> merge(cost, trees, all=TRUE)
        farm cost trees
    1 farm A   10    20
    2 office  100    NA
    3 farm B   NA    30

I

library(dplyr)
full_join(cost, trees)

Zwraca

> 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
 25
Author: Avraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-14 04:26:25
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
 1
Author: Jiqing Huang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 08:39:07