32

マージしたい 2 つの 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_joininner_joinsemi_joinanti-joinmergeall=TRUE

また、NA を 0 に設定する簡単な方法はありますか? これまでの私の取り組みx$trees[is.na(x$trees)] <- 0;は面倒で (列ごとにコマンドが必要です)、常に機能しているとは限りません。

ありがとう

4

2 に答える 2

1
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
于 2014-07-28T08:39:07.627 に答える