一个分组条形图中的两个数据帧

时间:2016-03-19 20:37:54

标签: r

我有这两个数据帧。我在将这两个变量放在一个分组的条形图中时遇到了麻烦

> dxmale
F20 F25 F31 F32 F33 F34 F41 
  1   3   1   5   9   3   3 

> dxfemale
F06 F20 F25 F28 F31 F32 F33 F34 F40 F41 F42 F50 F60 
  2   1   3   1   7   7  28   4   1  20   1   2   2

其中一个主要问题是许多列不匹配。我想放入一个分组的条形图,这样,如果一列中没有值,则在条形图中将显示为“0”。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我们可以melt(或stack来自base R - 正如@rawr所提到的那样)vectormerge

 library(reshape2)
 dM <- merge(melt(dxmale), melt(dxfemale), by="row.names", all=TRUE)

如果需要,NA可以替换为0.

 dM[is.na(dM)] <- 0
 colnames(dM)[2:3] <- c("male", "female")

然后执行barplot

 barplot(`colnames<-`(t(dM[-1]), dM[,1]), beside=TRUE, legend=TRUE)

enter image description here

更新

如果我们需要按男性的sum订购。和女性&#39;列

dM1 <- dM[order(Reduce(`+`, dM[-1])),]
barplot(`colnames<-`(t(dM1[-1]), dM1[,1]), beside=TRUE, legend=TRUE)

数据

dxmale <- structure(c(1, 3, 1, 5, 9, 3, 3), .Names = 
c("F20", "F25", "F31", "F32", "F33", "F34", "F41"))

dxfemale <- structure(c(2, 1, 3, 1, 7, 7, 28, 4, 1, 20, 1, 
 2, 2), .Names = c("F06", 
"F20", "F25", "F28", "F31", "F32", "F33", "F34", "F40", "F41", 
"F42", "F50", "F60"))

答案 1 :(得分:1)

这是一个基于base R和格子barchart的解决方案的解决方案。

首先,我们使用stack合并数据框(以长格式放置数据)和merge

 mm <- merge(stack(dxfemale),stack(dxmale),
            by="ind",all=TRUE,
  suffixes=c("male","female"))

然后以宽格式直接呼叫barchart

 barchart(valuesmale+valuesfemale~ind,mm,auto.key=TRUE)

enter image description here