我有一个相当强大的调查问卷(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
所以我也可以从这里工作
我希望像条形图那样,每个答案一个条,其中每个答案结果的高度就是给出答案的频率。
答案 0 :(得分:1)
也许这可能是一个起点:您可以使用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)