

使用するデータは以下のようなパネルデータ(unbalanced_pdf)です。pdata.frame()で、plm用の形式に変換しています。(一番左列:
企業id-年)

[code]

    ////////name price PBR 
    1-2009    会社a   1890      0.8            
    1-2010    会社a   1890      0.9              
    1-2011    会社a   1912      1.0           
    2-2011    会社b   1988      0.7             
    2-2012    会社b   2885      0.9          
    2-2013    会社b   2983      0.8      
    
[/code]

このデータをもとに、回帰分析を行うために以下のコマンドを実行したところ、エラーが表示されます。

**実行したコマンド:**

[code]

    fixedeffect_unbalanced_model<- plm(PBR ~ price +…, data = unbalanced_pdf,  method = "within", effect = "individual")
    
[/code]

**エラーメッセージ:**

[code]

    `.rowNamesDF<-`(x, value = value) でエラー: 重複した 'row.names' は許されません 
    
[/code]

このデータは全対象期間のデータが揃っていない個体も残している不完備パネルデータですが、完備パネルデータで同様の分析を行った場合、以上のようなエラーメッセージは表示されませんでした。  
思いつく原因があれば教えていただけると嬉しいです。


CC BY-SA 4.0
2021-11-18T22:20:31.287
83706
2023-08-03T10:02:45.377
2022-08-12T02:09:02.330
3060
48973
question
r
R エラーメッセージ　「`.rowNamesDF<-`(x, value = value) でエラー: 重複した 'row.names' は許されません」


問題を再現するデータ・コードの公開が難しいとのことであり, かつこちらでは問題を再現することができないため,
プログラミングに関するトラブル全般でまず試すべきことばかりになりますが, 以下をまず試してみてください.

  1. `plm()` 関数が競合していないか (自分で同名のものを定義していないか, **plm** パッケージ以外で同名の関数を読み込んでいないか) を確認する
  2. R 本体および **plm** パッケージを最新のものに更新し, 再び試す
  3. 公開可能なデータセットで似たような処理を行い, 同様の問題が発生するか確認する (これならコードもデータセットも公開できると思いますがどうでしょうか?)
  4. (上記で再現例が見つけられない場合) 公開できないというデータセットの行や列を少しづつ削減し, どのレコード・列が含まれているときに問題が発生するのかを調べ, 原因を推理する

また, コードも未公開であることから, 当て推量になりますが, 以下のような処理を行っていないでしょうか?

  1. 入力する `pdata.frame` の `row.names` を手動で書き換えていないか
  2. tibble オブジェクトを使用していないか (バージョンによりますが, まれに tibble ではうまく動作しないことが合った気がします)

新たな情報等ありましたらこの回答のコメントに付ける形でお願いします.


CC BY-SA 4.0
2021-11-21T11:37:07.223
83741
2021-11-21T11:37:07.223
40575
83706
answer


エラー表示の通り、Rでは rowname が重複することは出来ません。  
(rownameとは列ごとに振られるIDのようなものです)

`minimal reprex`を共有頂ければより詳細な回答が付くかと思いますが、  
推測するに

  1. データを整形する過程で重複するrownameが発生している
  2. 重複するrownameを含むTibbleを縦結合(bind.rows())しようとしている
  3. 不要なのにrownameを代入しようとしている

などがありませんか？

本来はデータの方を [`tidy data`](https://ja.wikipedia.org/wiki/Tidy_data)
の考え方に基づいてキレイにする事を考えるべきかと思いますが、  
そのような時にちゃちゃっとrownamesを振り直す補助関数 `make.names()` が存在しますので  
一度これを試してみてはいかがでしょう。

`rownames(unbalanced_pdf2) <- make.names(unbalanced_pdf[,1], unique = TRUE)`

参考(英語です)  
<https://stackoverflow.com/questions/31707654/r-set-duplicate-row-names-to-a-
numeric-data-frame>

また、`tidyverse`を使ったモダンなRの処理においては、rownameは殆どの場合使うことがありません。  
(使えるが、 [非推奨](https://tibble.tidyverse.org/reference/rownames.html)
)rowname周りのエラーに遭遇すること自体が、何か古い資料を参考にされているのではと感じました。

もしレガシーコードの流用が必要なければ、ぜひ取っつきやすくかつ高効率な
[tidyverse](https://en.wikipedia.org/wiki/Tidyverse) を使った処理を試してみて下さい。


CC BY-SA 4.0
2021-11-24T04:29:09.677
83784
2021-11-24T04:29:09.677
32676
83706
answer