R语言中排名类问卷结果的计算与可视化实现求助
处理排名问卷数据的R代码与分析方案
一、数据预处理
先加载常用的数据分析包,把宽格式的问卷数据转为长格式,同时剔除缺失值(NA)以便后续统计:
# 加载核心分析包 library(tidyverse) # 假设你的数据框名为rank_data,转换为长格式并清理NA rank_long <- rank_data %>% select(-id) %>% # 移除无需统计的id列 pivot_longer(cols = everything(), names_to = "动机", values_to = "排名") %>% filter(!is.na(排名)) # 过滤未填写的样本
二、统计各动机进入前3名的次数
直接筛选排名≤3的记录,按动机分组计数并排序,快速得到最受优先选择的动机:
top3_count <- rank_long %>% filter(排名 <= 3) %>% count(动机, sort = TRUE) %>% rename(前3名次数 = n) # 打印统计结果 print(top3_count)
三、可视化(替代Microsoft Forms条形图)
用横向条形图展示前3名次数,更易读取长动机名称:
ggplot(top3_count, aes(x = reorder(动机, 前3名次数), y = 前3名次数)) + geom_bar(stat = "identity", fill = "#2E86AB") + coord_flip() + # 转为横向条形图 labs(title = "各动机进入前3名的次数统计", x = "动机", y = "被评为前3名的次数") + theme_minimal() + theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))
四、更优分析与可视化方法
- 整体排名分布统计:不局限于前3,统计每个动机在各排名的分布占比,能更全面看出动机的优先级差异:
# 计算各动机的排名分布占比 rank_dist <- rank_long %>% count(动机, 排名) %>% group_by(动机) %>% mutate(占比 = n / sum(n)) # 可视化排名分布 ggplot(rank_dist, aes(x = 排名, y = 占比, fill = 动机)) + geom_bar(stat = "identity", position = "dodge") + labs(title = "各动机的排名分布占比", x = "排名(1=最优先)", y = "占比") + scale_fill_viridis_d() + theme_minimal()
- 平均排名计算:用平均排名衡量动机的整体优先级(数值越小代表越受重视),结果更直观:
mean_rank <- rank_long %>% group_by(动机) %>% summarize(平均排名 = mean(排名, na.rm = TRUE)) %>% arrange(平均排名) # 可视化平均排名 ggplot(mean_rank, aes(x = reorder(动机, 平均排名), y = 平均排名)) + geom_bar(stat = "identity", fill = "#F24C4E") + coord_flip() + labs(title = "各动机的平均排名", x = "动机", y = "平均排名(值越小越优先)") + theme_minimal()
- 缺失值补充统计:如果需要关注未回答情况,可统计每个动机的未回答率:
na_rate <- rank_data %>% select(-id) %>% summarise(across(everything(), ~ mean(is.na(.)))) %>% pivot_longer(cols = everything(), names_to = "动机", values_to = "未回答率") %>% arrange(desc(未回答率)) print(na_rate)
内容的提问来源于stack exchange,提问作者Nadine M.
相关产品推荐
相关产品推荐

