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
わたしにはできる。私は次のことをしました。
library(reshape2)
tableMS <- read.table(text=' 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',header=TRUE)
[〜#〜] edit [〜#〜]これは、Z
とT
をリストに強制変換しても機能します。
tableMS$Z <- as.list(tableMS$Z)
tableMS$T <- as.list(tableMS$T)
MeltTable <- melt(tableMS,id=c("X","Y"))
# MeltTable
# X Y variable value
# 1 375 855 Z 455.7259
# 2 395 969 Z 347.8306
# 3 449 811 Z 309.9512
# 4 451 774 Z 278.2910
# 5 453 774 Z 278.2910
# 6 455 774 Z 278.2910
# 7 521 697 Z 376.7340
# 8 529 855 Z 455.7259
# 9 531 855 Z 455.7259
# 10 609 774 Z 278.2910
# 11 375 855 T 3777.8560
# 12 395 969 T 2506.7000
# 13 449 811 T 519.8513
# 14 451 774 T 717.8705
# 15 453 774 T 717.8705
# 16 455 774 T 717.8705
# 17 521 697 T 693.8541
# 18 529 855 T 3777.8560
# 19 531 855 T 3777.8560
# 20 609 774 T 717.8705
回避策は、data.table
パッケージを使用することです。ところで、このソリューションはより高速です。
library(data.table)
tableMS$Z <- as.vector(as.list(tableMS$Z))
tableMS$T <- as.vector(as.list(tableMS$T))
setDT(tableMS)
melt(tableMS,id=c("X","Y"))
私も同じ問題を抱えていましたが、原因は異なりました。 「名前が以前の名前と一致しません」という同じエラーメッセージが表示されましたが、パッケージ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"))
その後、最後のブロックはエラーなしで完了します。
試してください:
tableMS <- data.frame(tableMS)
次に、tableMSを希望どおりに溶かします。