17

tableMS と呼ばれる次の data.frame があります。

     X   Y        Z        T
1  375 855 455.7259 3777.856
2  395 969 347.8306   2506.7
3  449 811 309.9512 519.8513
4  451 774  278.291 717.8705
5  453 774  278.291 717.8705
6  455 774  278.291 717.8705
7  521 697  376.734 693.8541
8  529 855 455.7259 3777.856
9  531 855 455.7259 3777.856
10 609 774  278.291 717.8705

関数melt()を使用しようとすると

MeltTable <- melt(tableMS,id=c("X","Y"))

次のエラーが表示されます。

Error in match.names(clabs, names(xi)) : 
   names do not match previous names

私は何が起こるか理解するのに苦労しています、何か考えはありますか?

編集:より大きなテーブルの一部として tableMS を生成し、str(tableMS) の出力は次のとおりです。

'data.frame':   10 obs. of  4 variables:
$ X: num  375 395 449 451 453 455 521 529 531 609
$ Y: num  855 969 811 774 774 774 697 855 855 774
$ Z:List of 10
  ..$ : num 456
  ..$ : num 348
  ..$ : num 310
  ..$ : num 278
  ..$ : num 278
  ..$ : num 278
  ..$ : num 377
  ..$ : num 456
  ..$ : num 456
  ..$ : num 278
$ T:List of 10
  ..$ : num 3778
  ..$ : num 2507
  ..$ : num 520
  ..$ : num 718
  ..$ : num 718
  ..$ : num 718
  ..$ : num 694
  ..$ : num 3778
  ..$ : num 3778
  ..$ : num 718
4

3 に答える 3

50

私はこれと同じ問題を抱えていましたが、原因は異なっていました。「名前が以前の名前と一致しません」という同じエラー メッセージが表示されましたが、パッケージdplyrを使用したことが原因でした。

結局のところ、これはdplyr の既知の問題です。GitHub の問題によると、dplyr と reshape の一部のバージョンで発生しますが、他のバージョンでは発生しません。

dplyrからの出力は単なるdata.frameではなく、data.frame から継承されます。したがって、dplyr を使用してdataこれを生成した後の結果は次のとおりです。

class(data)

> [1] "tbl_df"     "tbl"        "data.frame"

melt(data, id = c("X", Y"))

>Error in match.names(clabs, names(xi)) : 
names do not match previous names

この問題を解決するには、dplyrの出力をデータ フレームに変換する必要がありました。これは、これらのパッケージを組み合わせる推奨される方法でもあるようです。

data <- as.data.frame(data)
class(data)

> [1] "data.frame"

melt(data, id = c("X", "Y"))

その後、最後のブロックはエラーなしで完了します。

于 2016-02-19T08:48:30.950 に答える