R 绘制有序变量的频率计数
我有一份相当强大的调查问卷,共有2000名参与者,分为86个地理区域KPG。这将是更广泛的土地利用变化研究的一部分,因此我需要可视化每个KPG的每个答案的频率,以了解我的数据。答案是问卷调查的答案,所以它们是由在线调查公司转换成数字的顺序或名义数据R 绘制有序变量的频率计数,r,R,我有一份相当强大的调查问卷,共有2000名参与者,分为86个地理区域KPG。这将是更广泛的土地利用变化研究的一部分,因此我需要可视化每个KPG的每个答案的频率,以了解我的数据。答案是问卷调查的答案,所以它们是由在线调查公司转换成数字的顺序或名义数据 KPG Q1 Q2 Q3 1 112 -1 5 4 2 112 5 5 4 3 112 1 5 4 4 112 2 5 4 5 111 3 3 4 6 111 4 3 -1 7 111 2 3 2
KPG Q1 Q2 Q3
1 112 -1 5 4
2 112 5 5 4
3 112 1 5 4
4 112 2 5 4
5 111 3 3 4
6 111 4 3 -1
7 111 2 3 2
8 111 2 3 3
9 111 2 3 5
10 111 2 3 5
11 113 2 3 5
12 113 2 -1 5
13 113 1 2 5
14 113 -1 2 5
15 113 -1 5 5
16 113 4 2 5
plot(table(test$Q1))
给我所有KPG中问题1的频率计数
现在,我如何将该图分解为每个KPG
plot(table(Q1~KPG, data="test")
以一个错误结束,我想会的。但我似乎不知道如何得到正确的情节
在stackoverflow的帮助下,我得到了一个频率计数
FREQTEST<-do.call("cbind", lapply(names(test[-1]), function(x) { temp <- as.data.frame.matrix(table(test[["KPG"]], test[[x]])); setNames(temp, paste0(x, names(temp))) }))
所以我也可以从这里开始工作
我期望类似条形图的东西,每个答案有一个条形图,其中每个答案结果的高度就是给出答案的频率。也许这可以作为一个起点:您可以使用dplyr、ggplot2处理数据并绘制它们 但是,以下代码:
# first, I used your function to have the frequencies:
ftest <- do.call("cbind", lapply(names(test[-1]), function(x) { temp <- as.data.frame.matrix(table(test[["KPG"]], test[[x]])); setNames(temp, paste0(x, names(temp))) }))
# then I added the KPG as column, not as rownames
ftest$KPG <- rownames(ftest)
library(ggplot2)
library(dplyr)
# now the work on the data, and the plot, in a dplyr chain
gather(ftest, variable, value, -KPG) %>% # from wide to long format
ggplot(aes(x = variable, y = value)) + # add plot, faced by kpg
geom_bar(stat = 'identity') +
facet_wrap(vars (KPG))
您可以根据自己的喜好进行定制
关于数据:
test <- read.table(text = "KPG Q1 Q2 Q3
1 112 -1 5 4
2 112 5 5 4
3 112 1 5 4
4 112 2 5 4
5 111 3 3 4
6 111 4 3 -1
7 111 2 3 2
8 111 2 3 3
9 111 2 3 5
10 111 2 3 5
11 113 2 3 5
12 113 2 -1 5
13 113 1 2 5
14 113 -1 2 5
15 113 -1 5 5
16 113 4 2 5",header = T)
使用ggplot,您可以执行以下操作:ggplottest、aesQ1、fill=factorKPG+geom_bar,或者使用base R:barplottest$Q1、col=factortest$kpgt谢谢,这是一个好的开始。。。然而,在我的真实数据中,我有86行40列。有没有一种方法可以在没有所有不必要的输入的情况下,为每个问题和每个KPG获得一个单独的绘图?
test <- read.table(text = "KPG Q1 Q2 Q3
1 112 -1 5 4
2 112 5 5 4
3 112 1 5 4
4 112 2 5 4
5 111 3 3 4
6 111 4 3 -1
7 111 2 3 2
8 111 2 3 3
9 111 2 3 5
10 111 2 3 5
11 113 2 3 5
12 113 2 -1 5
13 113 1 2 5
14 113 -1 2 5
15 113 -1 5 5
16 113 4 2 5",header = T)