-1

Hi I am trying to plot different values on the same geom_bar like this. To do so, if I understand it correctly, I do have to format my data. I start with this dataset:

>MyDT
             Name     N0 N1     N2     N9        
     1:     Novo_M 250617  0 586984 395412      
     2:     Novo_Y 343741  0 804612  84660     
     3:     Novo_P 353382  0 795977  83654  

And I would like to format it that way:

         Name   Val   Categorie
        Novo_M 250617  N0
        Novo_M 0       N1
        Novo_M 586984  N2
        Novo_M 395412  N9   
        Novo_Y 343741  N0   
        Novo_Y 0       N1 
        Novo_Y 804612  N2 
        Novo_Y 84660   N9
        Novo_P 353382  N0 
        Novo_P 0       N1
        Novo_P 795977  N2 
        Novo_P 83654   N9

However, when I run this code I have an unexpected behaviour that I understand but I can't have the exact format as above:

Colnames<-colnames(MyDT)
NewData.list<-lapply(1:nrow(StatsAll),function(x){
  Row<-StatsAll[x,]
  data.frame(DivisionName=Row[,1],values=c(Row[,2],Row[,3],Row[,4],Row[,5]),Categories=Colnames[c(2,3,4,5)])
})

I also tried the following but without success

Colnames<-colnames(MyDT)
NewData.list<-lapply(1:nrow(StatsAll),function(x){
  Row<-StatsAll[x,]
  data.frame(DivisionName=Row[,1],values=c(Row[,x]),Categories=Colnames[c(2,3,4,5)])
})

Cheers, Eddie

Eddie
  • 179
  • 1
  • 1
  • 7

1 Answers1

1

Try the code below

> melt(dt, id.var = "Name", value.name = "Val", variable.name = "Categorie")[order(Name)]       
      Name Categorie    Val
 1: Novo_M        N0 250617
 2: Novo_M        N1      0
 3: Novo_M        N2 586984
 4: Novo_M        N9 395412
 5: Novo_P        N0 353382
 6: Novo_P        N1      0
 7: Novo_P        N2 795977
 8: Novo_P        N9  83654
 9: Novo_Y        N0 343741
10: Novo_Y        N1      0
11: Novo_Y        N2 804612
12: Novo_Y        N9  84660
ThomasIsCoding
  • 96,636
  • 9
  • 24
  • 81