У меня есть два фрейма данных 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;
до сих пор трудоемки (мне нужна команда для каждого столбца) и, похоже, не всегда работают.
Благодарность
plyr::join_all
? - person rawr   schedule 18.02.2014library(zoo); cost %.% merge(trees, all = TRUE) %.% lapply(na.fill, fill = 0) %.% as.data.frame()
- person G. Grothendieck   schedule 18.02.2014DF[is.na(DF)]<-0
превратит NA в 0 - наdplyr
я думаю, что нет. - person Stephen Henderson   schedule 18.02.2014outer_join()
, который еще не реализован: github.com/hadley/dplyr/issues / 96 - person hadley   schedule 18.02.2014merge
и подождуouter_join
! - person Racing Tadpole   schedule 18.02.2014