如何绘制具有多个频率的数据帧作为因子?

时间:2017-01-15 16:37:01

标签: r ggvis

我有这个数据框:

df <- data.frame(make = c("dodge", "dodge", "toyota", "ford", "dodge", "toyota","toyota","ford",  "ford", "dodge"),
                  grn = c(    1,      1,        NA,      1,     NA,      NA,       1,         1,      NA,      NA),
                  blu = c(    NA,     NA,       1,       NA,    1,       NA,       NA,        NA,     1,       NA),
                  blk = c(    NA,     NA,       NA,      NA,    NA,      1,        NA,        NA,     NA,       1))   

我正在尝试使用&#34; make&#34;创建一个情节。在x轴和总和&#34; make&#34;计算y轴并使用颜色填充。我想我需要为make和color制作一个计数表,但我不确定如何做到这一点。例如,表格看起来像这样:

 DF <- read.table(text = "make  grn  blu  blk
                          dodge  2    1    1
                          ford   2    1    0
                          toyota 1    1    1", header = TRUE)

然后解决方案非常简单

library(reshape2)
library(ggplot2)

DF1 <- melt(DF, id.var="make")

ggplot(DF1, aes(x = make, y = value, fill = variable)) +
geom_bar(stat = "identity")

那么如何转换我的数据框&#34; df&#34;进入&#34; DF&#34;?

2 个答案:

答案 0 :(得分:3)

嗯,你不必进行所有这些改造。制作情节的较短方式:

df %>%
  gather(key=col, value=num, -make) %>%
  na.omit() %>%
  ggplot(aes(make, fill=col)) +
    geom_bar()

前三行创建输入数据的长格式。然后传递给ggplot以进行统计变换。

答案 1 :(得分:2)

您可以使用dplyr::summarise_all

library(dplyr)
df %>% group_by(make) %>% summarise_all(sum, na.rm=TRUE)

# A tibble: 3 × 4
#    make   grn   blu   blk
#  <fctr> <dbl> <dbl> <dbl>
#1  dodge     2     1     1
#2   ford     2     1     0
#3 toyota     1     1     1