首页 > 解决方案 > 绘制序数变量的频率计数

问题描述

我有一份相当艰巨的问卷(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))

给我一个问题 1 在所有 KPG 上的频率计数

现在我如何把这个情节分解成每个 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))) }))

通过分组因子 (KPG) 对所有问题产生正确的频率计数。

Q1-1 Q11 Q12 Q13 Q14 Q15 Q2-1 Q22 Q23 Q25 Q3-1 Q32 Q33 Q34 Q35
111    0   0   4   1   1   0    0   0   6   0    1   1   1   1   2
112    1   1   1   0   0   1    0   0   0   4    0   0   0   4   0
113    2   1   2   0   1   0    1   3   1   1    0   0   0   0   6

所以我也可以从这个开始工作

我期望类似于条形图的东西,每个答案一个条形图,其中每个答案结果的高度是给出答案的频率。

标签: r

解决方案


也许这可能是一个起点:您可以使用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)

推荐阅读