Why does reshape2 melt return value = NA for me?
It works for me with reshape, but not with reshape2:
Here is an example datafile:
"","station_id","year","month","day","h1","h2","h3","h4","h5","h6","h7","h8","h9","h10","h11","h12","h13","h14","h15","h16","h17","h18","h19","h20","h21","h22","h23","h24"
"1",1,2004,1,1,46,46,45,41,39,35,33,33,36,47,53,54,55,55,55,55,52,46,40,40,39,38,40,41
"2",1,2004,1,2,43,44,46,46,47,47,47,47,47,47,47,49,52,56,54,56,57,53,50,47,46,45,45,45
"3",1,2004,1,3,45,46,46,44,43,46,46,47,51,55,56,59,65,68,69,68,68,65,64,63,62,63,63,62
"4",1,2004,1,4,63,62,62,62,60,60,60,62,60,64,64,66,71,70,71,72,71,68,67,67,65,64,65,64
"5",1,2004,1,5,64,63,65,64,64,64,64,64,65,66,66,67,68,68,66,66,66,66,63,54,52,49,47,47
"6",1,2004,1,6,47,46,45,43,41,41,39,39,40,43,45,44,45,46,46,46,45,39,39,39,38,36,32,32
Let’s say it is saved as /tmp/foo.csv, then:
Using reshape:
$ R
...
Type 'q()' to quit R.
> library("reshape")
Loading required package: plyr
Attaching package: ‘reshape’
The following object(s) are masked from ‘package:plyr’:
rename, round_any
> hlist <- NULL; for(z in 1:24) { hlist <- cbind(hlist, sprintf("h%d",z)) }
>
> thh <- read.csv('/tmp/foo.csv')
> thm <- melt(thh,measure.vars=hlist,variable="hour")
> head(thm)
station_id year month day hour value
1 1 2004 1 1 h1 46
2 1 2004 1 2 h1 43
3 1 2004 1 3 h1 45
4 1 2004 1 4 h1 63
5 1 2004 1 5 h1 64
6 1 2004 1 6 h1 47
> q()
Using reshape2:
$ R
...
Type 'q()' to quit R.
> library("reshape2")
> hlist <- NULL; for(z in 1:24) { hlist <- cbind(hlist, sprintf("h%d",z)) }
>
> thh <- read.csv('/tmp/foo.csv')
> thm <- melt(thh,measure.vars=hlist,variable="hour")
> head(thm)
station_id year month day hour value
1 1 2004 1 1 h1 NA
2 1 2004 1 2 h1 NA
3 1 2004 1 3 h1 NA
4 1 2004 1 4 h1 NA
5 1 2004 1 5 h1 NA
6 1 2004 1 6 h1 NA
> q()
You can see that using library("reshape"), the value column has numbers, but for libary("reshape2"), it has NA, for the same data.
There are better ways to do what you are trying to do.
All of the following would work with
melt()fromreshape2:It seems like
melt()from “reshape” accepts a matrix as an input formeasure.vars, butmelt()from “reshape2” does not (which I find more reasonable).Update: Example reproducible problem
FYI, below is a start-to-finish way that you can share this problem in a way that is convenient for other Stack Overflow users to copy and paste:
Now, demonstrate your problem. You can use
detach(package:package_name)instead of having to quit and restart R.Hope this helps!