5
$\begingroup$

I have a dataframe 'd' like this:

   breaks counts.x counts.y
1     -20        1        1
2     -15        0        1
3     -10        0        5
4      -5        4       18
5       0       13       27
6       5       18       25
7      10        9       12
8      15        2        1
9      20        1        7
10     25       NA        0
11     30       NA        1

When I try to melt using 'breaks' as id variable it is giving me the following error:

 d=melt(d,id=breaks)
Error in varnames[id.vars] : 
  only 0's may be mixed with negative subscripts

How can I resolve this? I have to draw a ggplot using breaks on x axis and counts on y axis.

$\endgroup$
3
  • 1
    $\begingroup$ If you are getting an error running this code, it could be a package conflict. Try restarting R. $\endgroup$ – David Pepper May 1 '16 at 13:19
  • $\begingroup$ I think you have a typo. Either use melt(d, id = "breaks") (quote breaks) or melt(d, id = 1). $\endgroup$ – David Arenburg May 1 '16 at 13:28
  • $\begingroup$ We need a Minimum Reproducible Example. Please dump the output of dput(your_data_frame) $\endgroup$ – smci Feb 26 '17 at 3:47
1
$\begingroup$

I am sorry, is this the kind of ggplot you want to obtain ?

enter image description here

If yes this is the code behind it:

library(reshape)
library(ggplot2)

d <- data.frame(breaks = c(-20, -15, -10, -5,  0, 5, 10, 15, 20, 25, 30),
                counts.x  = c(1, 0, 0 ,4 , 13, 18, 9, 2, 1, NA, NA),
                counts.y = c(1, 1, 5, 18, 27, 25, 12, 1, 7 , 0, 1))

d <- melt(d, id = "breaks")

ggplot(d, aes(x = breaks, y = value)) + geom_point(aes(colour = variable)) +
       labs(title = "Bins vs. Counts", x = "Bins", y = "Counts") +
       theme(plot.title = element_text(face = "bold"))
$\endgroup$
2
  • $\begingroup$ YEs.. I have to make ggplot same as yours but I was getting an error while melting. $\endgroup$ – pinky Apr 1 '16 at 16:32
  • $\begingroup$ Because @pinky you had d <- melt(d, id = breaks) which can fail in two ways - first you must have an object called breaks lying around otherwise R will give object 'breaks' not found and secondly because you passed the value of breaks (ie a vector of numeric values) rather than the name of the id column as a scalar character value as the answerer here has done correctly with melt(d, id = "breaks") - the quote marks are vital. $\endgroup$ – Spacedman Apr 23 '18 at 14:55
1
$\begingroup$

Not a fix to your exact problem, but an alternative solution would be to try library(tidyr):

library(tidyr)
d <- gather(d,"variable","value",2:3)

And it will give you columns 2:3 as rows.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.