2016-04-25 5 views
-1

大きなパネルデータセットで作業しています。私の単純なデータセットは以下のようになります。データテーブルの列をパネルデータ構造に結合する方法

 

+--------+------+------+-----+-----+--------+ 
| Time | Firm | Land | Lab | Cap | GL | 
+--------+------+------+-----+-----+--------+ 
| Jan-00 | A | 25 | 261 | 13 | 161521 | 
| Feb-00 | A | 25 | 334 | 15 | 142452 | 
| Mar-00 | A | 25 | 156 | 14 | 365697 | 
| Apr-00 | A | 28 | 134 | 12 | 355789 | 
| May-00 | A | 28 | 159 | 15 | 376843 | 
| Jun-00 | A | 28 | 119 | 12 | 258762 | 
| Jul-00 | A | 28 | 41 | 45 | 255447 | 
| Aug-00 | A | 28 | 247 | 75 | 188545 | 
| Sep-00 | A | 28 | 251 | 41 | 213663 | 
| Oct-00 | A | 30 | 62 | 12 | 273209 | 
| Nov-00 | A | 30 | 525 | 15 | 317468 | 
| Dec-00 | A | 30 | 217 | 16 | 238668 | 
| Jan-01 | B | 42 | 298 | 42 | 241286 | 
| Feb-01 | B | 42 | 109 | 45 | 135288 | 
| Mar-01 | B | 42 | 7 | 24 | 363609 | 
| Apr-01 | B | 42 | 12 | 56 | 318472 | 
| May-01 | B | 42 | 0 | 12 | 446279 | 
| Jun-01 | B | 45 | 50 | 12 | 390230 | 
| Jul-01 | B | 45 | 143 | 45 | 118945 | 
| Aug-01 | B | 45 | 85 | 25 | 174887 | 
| Sep-01 | B | 45 | 80 | 15 | 183770 | 
| Oct-01 | B | 45 | 214 | 12 | 197832 | 
| Nov-01 | B | 45 | 525 | 15 | 317468 | 
| Dec-01 | B | 45 | 217 | 16 | 238668 | 
+--------+------+------+-----+-----+--------+

上記のデータフレームには、次のコードを使用してアクセスできます。

structure(list(Time = structure(c(9L, 7L, 15L, 1L, 17L, 13L, 
11L, 3L, 23L, 21L, 19L, 5L, 10L, 8L, 16L, 2L, 18L, 14L, 12L, 
4L, 24L, 22L, 20L, 6L), .Label = c("Apr-00", "Apr-01", "Aug-00", 
"Aug-01", "Dec-00", "Dec-01", "Feb-00", "Feb-01", "Jan-00", "Jan-01", 
"Jul-00", "Jul-01", "Jun-00", "Jun-01", "Mar-00", "Mar-01", "May-00", 
"May-01", "Nov-00", "Nov-01", "Oct-00", "Oct-01", "Sep-00", "Sep-01" 
), class = "factor"), Firm = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L), .Label = c("A", "B"), class = "factor"), Land = c(25L, 
25L, 25L, 28L, 28L, 28L, 28L, 28L, 28L, 30L, 30L, 30L, 42L, 42L, 
42L, 42L, 42L, 45L, 45L, 45L, 45L, 45L, 45L, 45L), Lab = c(261L, 
334L, 156L, 134L, 159L, 119L, 41L, 247L, 251L, 62L, 525L, 217L, 
298L, 109L, 7L, 12L, 0L, 50L, 143L, 85L, 80L, 214L, 525L, 217L 
), Cap = c(13L, 15L, 14L, 12L, 15L, 12L, 45L, 75L, 41L, 12L, 
15L, 16L, 42L, 45L, 24L, 56L, 12L, 12L, 45L, 25L, 15L, 12L, 15L, 
16L), GL = c(161521L, 142452L, 365697L, 355789L, 376843L, 258762L, 
255447L, 188545L, 213663L, 273209L, 317468L, 238668L, 241286L, 
135288L, 363609L, 318472L, 446279L, 390230L, 118945L, 174887L, 
183770L, 197832L, 317468L, 238668L)), .Names = c("Time", "Firm", 
"Land", "Lab", "Cap", "GL"), class = "data.frame", row.names = c(NA, 
-24L)) 

以下のようにパネル構造に変換しました。

library(zoo) 
library(plm) 

Sys.setlocale("LC_TIME", "English") 
dat["time1"] <- as.yearmon(dat$Time,format="%b-%y") 
pdat <-pdata.frame(dat,index=c("Firm","time1")) 

オリジナル分析

pdat$Cap.lag.ln<-lag(log(pdat$Cap), 1) 
pdat$Cap.2lag.ln<-lag(log(pdat$Cap), 2) 
pdat$Lab.ln<-log(pdat$Lab+1) 
pdat$Lab.lag.ln<-lag(log(pdat$Lab+1), 1) 

Model1<- plm(log(Land) ~ Cap.lag.ln + Cap.2lag.ln + Lab.ln + Lab.lag.ln, 
     model = "within", data=pdat) 
summary(Model1) 

FV_Log <- data.table(Model1$model[[1]] - Model1$residuals) 

ただ、NASはPDATに当てはめ値

pdat2<-na.omit(pdat) 

が、私はこれらの装備の値を結合したい問題を組み合わせるために遅れから生じ省略しますpdat2にはありますが、そのままパネル構造を保持する必要があります。しかし、私が次のcbindのために行くなら、パネルの構造は消えてしまいます。

pdat3 <-cbind(pdat2,FV_Log) 

でも、私は古い変数と次の方法を省略しようとしました。

pdat$Cap<-NULL 
pdat$Lab<-NULL 
pdat2 <- na.omit(pdat) 
pdat2$FV_Log <- (Model1$model[[1]] - Model1$residuals) 

and run my model2 using data=pdat2 but the following error message comes up. 
Model2<-plm(log(GL)~ Cap.lag.ln + Cap.2lag.ln + Lab.ln + Lab.lag.ln 
+ FV_Log, data=pdat2, model = "within") 

**Error in model.matrix.pFormula(formula, data, rhs = 1, model = model, : 
NA in the individual index variable 
In addition: Warning message: 
In `[.data.frame`(index, as.numeric(rownames(mf)),) : 
NAs introduced by coercion** 

この問題を特定し、モデル2をplm構造で実行するには誰でも助けてください。ありがとうございました

+0

ここで質問に関連するすべての記事をインラインで投稿するのが最も効果的です。 – Gopala

+0

あなたが参照したコードを含むように投稿を編集しました。これはピアレビューされる必要があり、すぐには表示されない可能性があります。私が含まれているコードが間違っている場合はお知らせください。それまでの間、私の答えを見てください。 – AOGSTA

+0

なぜあなたは 'data.table'を使用していますか? –

答えて

1

複製のために必要なOP提供コードの後に​​私の答えを更新してください。

私はdata.tableを使ってFV_Logを作成することは複雑な要因だと思います。

上記のpdat3の作成直後に以下のコードを実行しました。得data.frameクラスpdata.frameの対象でもあること

enter image description here

注:ここ

# convert FV_Log to just data.frame 
FV_Log<-data.frame(FV_Log) 

# bind FV_Log to pdat2 using use pdata.frame to preserve structure. 
pdat3_fix<-pdata.frame(cbind(pdat2,FV_Log),index=c("Firm","time1")) 

は、新しい列を除いてpdat2と同一であるpdat3_fixあります。

> class(pdat3_fix) 
[1] "pdata.frame" "data.frame" 
+0

自分の質問を編集しましたが、私の所見が20回、pdat2も20であることがわかりますが、pdat2にこの値の列を組み合わせる必要がありますが、pdata.frame構造は安全です。 – Doo

+0

最後のコードが機能していないため、このエラーメッセージが表示されます。 '[.data.frame'(reg_model_wFV、、c( "mergeID"、 "FV_Log.V1")、= F)のエラー: 未使用引数(= F) – Doo

+0

@Doo。元の投稿を編集していただきありがとうございます。上記のコードに合わせて私のソリューションを再現することができます。私のソリューションはあなたが前にやっていたdata.tablesを使って作業していると仮定して構築されているので、あなたはそのエラーを受けています。しかし、もうdata.tablesを使用していないので、merge()の第2引数のwith =パラメータは、reg_model_wFVがdata.tableではないためエラーを引き起こしています。これはdata.frameだけです。 "、with = F" – AOGSTA

関連する問題