dplyrのinner_joinで2つの条件で結合する際のエラー

投稿者: Anonymous

Rを用いてdplyrでパネルデータの1回ラグをとったデータを作りたいと考えています。
plmなどのパッケージの利用も考えましたが、普通の回帰だけでなくより高度な分析も考えているのでデータフレーム自体をいじりたいと考えています。
データid <- id.csvは以下のような感じです。

ID time y x1 x2 
 1    1 5  7  8
 1    2 2  6 10
 1    3 9  9  6
 2    1 6  2  3
 3    7 1  6  3

これをdplyrで

id1 <- id %>% mutate(time1=time-1)
id2 <- id %>% select(ID,time,y)
id3 <- id2 %>% inner_join(id1,by=c("time"="time1","ID"="ID"))

と操作すると最後のinner_joinのところで

Error: Data table joins must be on same key

とエラーが出てしまうのですが、対処の仕方をご存じの方いらっしゃいましたら回答をお願い致します。

解決

バックエンドとしてdata.tableを用いる場合には、異なるキーによるjoinがまだサポートされていません。

Join with different keys · Issue #20 · hadley/dtplyr
https://github.com/hadley/dtplyr/issues/20

このコードは、timetime1という異なるキーをjoinしようとしているのでError: Data table joins must be on same keyというエラーになるようです。

by=c("time"="time1","ID"="ID")

とりあえずの回避策としては、time-1のカラムをtime1ではなくtimeにすることです。こうすれば同じキーでjoinできます。(そのかわり、もとのtimeを別のカラムに入れておく必要があります)

id1 <- id %>% mutate(time_orig = time, time=time-1)
id2 <- id %>% select(ID,time,y)
id3 <- id2 %>% inner_join(id1,by=c("time","ID"))

これで望みの結果になるでしょうか?

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *