绘制序数的频率计数

时间:2019-02-07 08:00:27

标签: 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
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))) }))

根据分组因子(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

所以我也可以从这里工作

我希望像条形图那样,每个答案一个条,其中每个答案结果的高度就是给出答案的频率。

1 个答案:

答案 0 :(得分:1)

也许这可能是一个起点:您可以使用dplyrggplot2来处理数据并绘制它们。

但是,这里的代码:

# 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))

enter image description here

您可以根据需要自定义它。


有数据:

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)