R cannot melt the data.

I have the following data.frame called tableMS:

XYZT 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 

when i try to use the melt () function

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

I get the following error:

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

I'm trying to understand what is happening, any idea?

Edit: I created tableMS as part of a larger table, and the output is 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 
+7
source share
2 answers

This works for me. I did the following.

 library(reshape2) tableMS <- read.table(text=' XYZT 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 This works even if you force Z and T to the list.

 tableMS$Z <- as.list(tableMS$Z) tableMS$T <- as.list(tableMS$T) MeltTable <- melt(tableMS,id=c("X","Y")) # MeltTable # XY 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 

edit does not work with reshape2 1.4.2

A data.table is to use the data.table package. BTW is faster.

 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")) 
+3
source

I had the same problem, but the reason was different. I received the same error message "names do not match previous names", but this was due to the use of the dplyr package.

Turns out this is a known issue with dplyr . According to the GitHub problem, this will happen in some version of dplyr and will change form, but not on others.

Exiting dplyr is not only data.frame - it inherits from data.frame. Therefore, after using dplyr to create data this is the result:

 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 

To fix this problem, I had to convert the dplyr output to a data frame. This also seems to be the recommended way to combine these packages:

 data <- as.data.frame(data) class(data) > [1] "data.frame" melt(data, id = c("X", "Y")) 

The last block completes without error.

+25
source

All Articles