首先,我想对是否已经提出这个问题表示歉意-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格式最简单,但是很遗憾,我无法编辑数据文件。对我来说,包含我要使用的代码将毫无意义,因为它的输出与我在寻找的内容几乎不符。
答案 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))
使用数据框时,学习dplyr
和tidyr
很有用。 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()