统计各列之间的频率并添加到条形图中?

时间:2018-09-04 01:16:40

标签: r ggplot2 bar-chart

首先,我想对是否已经提出这个问题表示歉意-this这个问题有些相似,但是我仍然看不到发布者如何能够通过以下方式隔离,计数和绘制TRUE实例:代码中的“批处理”。我对RStudio和编码一般都是新手。

我想使用RStudio在四列数据之间计数频率并将计数转换为条形图。数据的结构如下:

Column 1: 0,0,1,0,0,1...
Column 2: 1,0,0,0,0,0...
Column 3: 0,1,0,1,0,0...
Column 4: 0,0,0,0,1,0...

我正在使用的.csv分别列出每列。如何计算每列中出现的“ 1”并将其绘制在条形图上(特别是在ggplot2中)?我想对图形进行格式化,以使每个“列”在x轴上都是一个变量,而“ 1”的频率在y轴上表示。

在这种情况下,重新格式化.csv格式最简单,但是很遗憾,我无法编辑数据文件。对我来说,包含我要使用的代码将毫无意义,因为它的输出与我在寻找的内容几乎不符。

1 个答案:

答案 0 :(得分:1)

假设您的数据框看起来像这样:

df1 <- data.frame(Column1 = c(0,0,1,0,0,1),
                  Column2 = c(1,0,0,0,0,0),
                  Column3 = c(0,1,0,1,0,0),
                  Column4 = c(0,0,0,0,1,0))

使用数据框时,学习dplyrtidyr很有用。 Start here了解有关这些tidyverse软件包的信息。

library(dplyr)
library(tidyr)
library(ggplot2)

您的数据是“宽”的。最好将其设置为“ long”,这意味着有一列用于变量名,另一列用于变量名。使用gather

df1 %>% 
  gather(Var, Val)

现在您可以按每个变量和值count进行

df1 %>% 
  gather(Var, Val) %>% 
  count(Var, Val)

  Var       Val     n
  <chr>   <dbl> <int>
1 Column1     0     4
2 Column1     1     2
3 Column2     0     5
4 Column2     1     1
5 Column3     0     4
6 Column3     1     2
7 Column4     0     5
8 Column4     1     1

之后,您可以filter替换Val == 1的行,并将其传递给ggplot

df1 %>% 
  gather(Var, Val) %>% 
  count(Var, Val) %>% 
  filter(Val == 1) %>% 
  ggplot(aes(Var, n)) + geom_col()

enter image description here