Stathis Kamperis
2012-Oct-07 20:40 UTC
[R] Reshape2, melt, order of categorical variable and ggplot2
Hello everyone, I have the following data frame:> dfV1 V2 V3 1 bench1_10 16675 16678 2 bench1_10 16585 16672 3 bench1_100 183924 185563 4 bench1_100 169310 184806 5 bench1_300 514430 516834 6 bench1_300 510743 514062 7 bench1_500 880146 877882 8 bench1_500 880146 857359 9 bench1_1k 880146 1589600 10 bench1_1k 880146 1709990>I'd like to melt it by using id=V1:> mdf <- melt(df)Using V1 as id variables> mdfV1 variable value 1 bench1_10 V2 16675 2 bench1_10 V2 16585 3 bench1_100 V2 183924 4 bench1_100 V2 169310 5 bench1_300 V2 514430 6 bench1_300 V2 510743 7 bench1_500 V2 880146 8 bench1_500 V2 880146 9 bench1_1k V2 880146 10 bench1_1k V2 880146 11 bench1_10 V3 16678 12 bench1_10 V3 16672 13 bench1_100 V3 185563 14 bench1_100 V3 184806 15 bench1_300 V3 516834 16 bench1_300 V3 514062 17 bench1_500 V3 877882 18 bench1_500 V3 857359 19 bench1_1k V3 1589600 20 bench1_1k V3 1709990>My problem is that V1 in mdf has bench1_1k before bench1_500 and so on. This is a problem because when I try to plot the results with: p <- ggplot(mdf, aes(x=mdf$V1, y=mdf$value)) p <- p + geom_point(aes(colour=factor(mdf$variable))) p I get bench1_1k in the horizontal axis before say bench1_500. Is there any way to have V1 in mdf "sorted" just like in df ? Or do I have to rename my files from bench1_1k to bench1_1000 and be done ? Best regards, Stathis
David Winsemius
2012-Oct-08 06:57 UTC
[R] Reshape2, melt, order of categorical variable and ggplot2
On Oct 7, 2012, at 1:40 PM, Stathis Kamperis wrote:> Hello everyone, > > I have the following data frame: > >> df > V1 V2 V3 > 1 bench1_10 16675 16678 > 2 bench1_10 16585 16672 > 3 bench1_100 183924 185563 > 4 bench1_100 169310 184806 > 5 bench1_300 514430 516834 > 6 bench1_300 510743 514062 > 7 bench1_500 880146 877882 > 8 bench1_500 880146 857359 > 9 bench1_1k 880146 1589600 > 10 bench1_1k 880146 1709990 >> > > I'd like to melt it by using id=V1: > >> mdf <- melt(df) > Using V1 as id variables >> mdf > V1 variable value > 1 bench1_10 V2 16675 > 2 bench1_10 V2 16585 > 3 bench1_100 V2 183924 > 4 bench1_100 V2 169310 > 5 bench1_300 V2 514430 > 6 bench1_300 V2 510743 > 7 bench1_500 V2 880146 > 8 bench1_500 V2 880146 > 9 bench1_1k V2 880146 > 10 bench1_1k V2 880146 > 11 bench1_10 V3 16678 > 12 bench1_10 V3 16672 > 13 bench1_100 V3 185563 > 14 bench1_100 V3 184806 > 15 bench1_300 V3 516834 > 16 bench1_300 V3 514062 > 17 bench1_500 V3 877882 > 18 bench1_500 V3 857359 > 19 bench1_1k V3 1589600 > 20 bench1_1k V3 1709990 >> > > My problem is that V1 in mdf has bench1_1k before bench1_500 and so > on. This is a problem because when I try to plot the results with: > > p <- ggplot(mdf, aes(x=mdf$V1, y=mdf$value)) > p <- p + geom_point(aes(colour=factor(mdf$variable))) > p > > I get bench1_1k in the horizontal axis before say bench1_500. > > Is there any way to have V1 in mdf "sorted" just like in df ? Or do I > have to rename my files from bench1_1k to bench1_1000 and be done ?In all likelihood you need to review the care and feeding of the factor beasts under your care. The alpha ordering is the default and that will put "bench1_1k" in the middle. You canchange the levels however. ?levels -- David Winsemius, MD Alameda, CA, USA
Jim Holtman
2012-Oct-08 06:59 UTC
[R] Reshape2, melt, order of categorical variable and ggplot2
use the 'levels' option on 'factor' to define the explicit order of the factors. This mightbwork on you data: df$V1 <- factor(df$V1, levels = unique(df$V1)) Sent from my iPad On Oct 7, 2012, at 16:40, Stathis Kamperis <ekamperi at gmail.com> wrote:> Hello everyone, > > I have the following data frame: > >> df > V1 V2 V3 > 1 bench1_10 16675 16678 > 2 bench1_10 16585 16672 > 3 bench1_100 183924 185563 > 4 bench1_100 169310 184806 > 5 bench1_300 514430 516834 > 6 bench1_300 510743 514062 > 7 bench1_500 880146 877882 > 8 bench1_500 880146 857359 > 9 bench1_1k 880146 1589600 > 10 bench1_1k 880146 1709990 >> > > I'd like to melt it by using id=V1: > >> mdf <- melt(df) > Using V1 as id variables >> mdf > V1 variable value > 1 bench1_10 V2 16675 > 2 bench1_10 V2 16585 > 3 bench1_100 V2 183924 > 4 bench1_100 V2 169310 > 5 bench1_300 V2 514430 > 6 bench1_300 V2 510743 > 7 bench1_500 V2 880146 > 8 bench1_500 V2 880146 > 9 bench1_1k V2 880146 > 10 bench1_1k V2 880146 > 11 bench1_10 V3 16678 > 12 bench1_10 V3 16672 > 13 bench1_100 V3 185563 > 14 bench1_100 V3 184806 > 15 bench1_300 V3 516834 > 16 bench1_300 V3 514062 > 17 bench1_500 V3 877882 > 18 bench1_500 V3 857359 > 19 bench1_1k V3 1589600 > 20 bench1_1k V3 1709990 >> > > My problem is that V1 in mdf has bench1_1k before bench1_500 and so > on. This is a problem because when I try to plot the results with: > > p <- ggplot(mdf, aes(x=mdf$V1, y=mdf$value)) > p <- p + geom_point(aes(colour=factor(mdf$variable))) > p > > I get bench1_1k in the horizontal axis before say bench1_500. > > Is there any way to have V1 in mdf "sorted" just like in df ? Or do I > have to rename my files from bench1_1k to bench1_1000 and be done ? > > Best regards, > Stathis > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.