首页 文章

堆积的条形图显示数据框的每列中不同值的计数

提问于
浏览
0

美好的一天,

我有一个数据框,如:

sample.df = data.frame(a=c(-1,1,0,-1),b=c(2,NA,1,2),c=c(0,0,1,2),d=c(-1,-2,0,0))

我想为每列生成一个堆积的条形图,显示每个唯一值在该列中出现的次数(忽略NA) .

我的第一个想法是创建一个新的数据框,其中可能的值为rownames(此处描述为Score),数据值是该列发生值的次数:

Score  a  b  c  d
2      0  2  1  0
1      1  1  1  0
0      1  0  2  0
-1     2  0  0  1
-2     0  0  0  1

我已经尝试过使用其他示例中的ddply,table和aggregate,但是没有找到进入该结构的方法 .

我的想法是,一旦我知道它应该直接将其交给barplot以获得堆积的条形图,显示每列中每个值的出现次数 .

我感谢您给我的任何指导 .

谢谢,

戴夫

To close the loop on this, here is where I ended up.

我按照tcash21的建议使用了熔化(“得分”不是原始数据中的属性a,b,c和d) . 另外,ggplot()给了我一个关于使用“y”和stat =“bin”的错误,所以我在ggplot()调用中删除了“y”的赋值 . 以下是我最终采取的步骤,以达到理想的情节:

sample.df = data.frame(a=c(-1,1,0,-1),b=c(2,NA,1,2),c=c(0,0,1,2),d=c(-1,-2,0,0))
new.df<-melt(sample.df)
new.df<-new.df[complete.cases(new.df),]
new.df$Score<-as.factor(new.df$value)
ggplot(new.df, aes(x=variable, fill=Score)) + geom_bar()

1 回答

  • 2

    您需要使用melt来将数据转换为适合ggplot的长形状:

    new.df<-melt(sample.df, id.vars="Score")
    ggplot(new.df, aes(x=Score, y=value, fill=variable)) + geom_bar()
    

相关问题