Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 绘制有序变量的频率计数_R - Fatal编程技术网

R 绘制有序变量的频率计数

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

我有一份相当强大的调查问卷,共有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
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)