首页 > 解决方案 > 使用 geom_bar 为堆积条形图格式化数据

问题描述

嗨,我想像这样在同一个 geom_bar 上绘制不同的值。为此,如果我理解正确,我必须格式化我的数据。我从这个数据集开始:

>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  

我想这样格式化它:

         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

但是,当我运行此代码时,我有一个我理解的意外行为,但我无法使用上面的确切格式:

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)])
})

我也尝试了以下但没有成功

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)])
})

干杯,埃迪

标签: rdataframeggplot2bar-chart

解决方案


试试下面的代码

> 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

推荐阅读