29868


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

[code]

    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
    
[/code]

これをdplyrで

[code]

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

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

[code]

    Error: Data table joins must be on same key
    
[/code]

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


CC BY-SA 3.0
2016-10-19T09:39:07.090
29700
2018-03-04T07:08:17.027
2018-03-04T07:08:17.027
12457
12457
question
sql r tidyverse
dplyrのinner_joinで2つの条件で結合する際のエラー


エラーメッセージを英語等で検索しましたがやはり不明でした。  
class()はどちらも"data.table" "data.frame"、typeof()はどちらもlistでした。

sqldfでINNER JOINしたところ無事結合できました。  
お手数をおかけしました。  
同様のエラーが出た方で対処に成功した方、対処法とその理由についてわかった方いらっしゃいましたらぜひ知りたいので書き込みお願いします。


CC BY-SA 3.0
2016-10-20T06:46:33.560
29735
2016-10-23T10:02:46.650
2016-10-23T10:02:46.650
12457
12457
29700
answer


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

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

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

[code]

    by=c("time"="time1","ID"="ID")
    
[/code]

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

[code]

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

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


CC BY-SA 3.0
2016-10-24T10:25:13.907
29868
2016-10-24T10:25:13.907
2544
29700
answer