您好,我是R的新手。我正在努力完成似乎比较简单的任务-我正尝试使用ggplot2从更长数据帧的数据子集中制作频率直方图。 这是所附图片中的数据结构示例 https://i.stack.imgur.com/HIwQv.png
数据来自调查,其中0表示未选中,1表示已选中。原始数据集中有数字,我想要选择每个变量的频率的直方图。 x轴上的列变量,y轴上的频率计数。我在数据框内有各种这样的子集,我希望每个子集都可以子集化自己的图形。
我首先将感兴趣的列作为子集 新数据集<-subset(df,select = c(WAB_R,WAB_B,BDAE,PNT)) 当我检查该类时,它是数据框,不再是数字
我尝试使用as.numeric将其转换回数字,但是没有运气 我可以使用一些指导来指导如何构建数据,然后获得直方图。
感谢卡拉
答案 0 :(得分:0)
也许可以使用tidyverse
函数来尝试这种方法。您必须重塑形状以长期选择所需的变量。下面的代码使用ggplot2
进行最终绘图:
library(tidyverse)
#Code 1
df %>% select(c(WAB_R, WAB_B, BDAE, PNT)) %>%
pivot_longer(everything()) %>%
ggplot(aes(x=value))+
geom_histogram(stat = 'count',aes(fill=name),
position = position_dodge2(0.9,preserve = 'single'))+
labs(fill='Variable')
输出:
或者这个:
#Code 2
df %>% select(c(WAB_R, WAB_B, BDAE, PNT)) %>%
pivot_longer(everything()) %>%
ggplot(aes(x=factor(value)))+
geom_histogram(stat = 'count',aes(fill=name),
position = position_dodge2(0.9,preserve = 'single'))+
labs(fill='Variable')+xlab('value')
输出:
使用了一些数据:
#Data
df <- structure(list(ID = 1:4, WAB_R = c(0L, 1L, 0L, 1L), WAB_B = c(0L,
1L, 0L, 0L), BDAE = c(0L, 0L, 0L, 1L), PNT = c(0L, 0L, 0L, 0L
)), class = "data.frame", row.names = c(NA, -4L))