Подтвердить что ты не робот

Есть ли метод R dplyr для объединения с all = TRUE?

У меня есть два R-кадра, которые я хочу объединить. В прямом R вы можете сделать:

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)

который производит:

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

Я использую dplyr и предпочитаю такое решение, как:

left_join(cost, trees)

который создает что-то близкое к тому, что я хочу:

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

В dplyr я могу видеть left_join, inner_join, semi_join и anti-join, но ни один из них не делает то, что merge с all=TRUE.

Также - есть ли быстрый способ установить NA на 0? До сих пор мои усилия с использованием x$trees[is.na(x$trees)] <- 0; были трудоемкими (мне нужна команда за столбец) и не всегда работают.

спасибо

4b9b3361

Ответ 1

В последней версии dplyr (0.4.0) теперь есть опция full_join, которая, как мне кажется, вам нужна.

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)

Возвращает

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

и

library(dplyr)
full_join(cost, trees)

Возвращает

> 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

Ответ 2

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