在R中为数据集创建子列:按国家统计问卷选项计数
R实现文化价值观问卷数据的多问题选项频次统计
完整代码
# 加载依赖包 library(tidyverse) # 1. 将宽格式数据转为长格式,自动匹配所有Q开头的问卷列 long_data <- WVSDATASET %>% pivot_longer( cols = starts_with("Q"), names_to = "question", values_to = "option" ) %>% filter(!is.na(option)) # 可选:排除选项为缺失值的记录 # 2. 分组统计每个国家、每个问题、每个选项的响应次数 count_data <- long_data %>% group_by(B_COUNTRY_ALPHA, question, option) %>% summarize(count = n(), .groups = "drop") # 3. 转回目标宽格式:国家为行,问题+选项为列,空值填充0 final_df <- count_data %>% pivot_wider( id_cols = B_COUNTRY_ALPHA, names_from = c(question, option), values_from = count, values_fill = 0 )
代码说明
- 自动遍历问卷列:用
starts_with("Q")自动匹配所有Q开头的问卷列(Q1-Q7),无需手动逐个指定,满足批量处理需求。 - 长格式转换:将原本分散在多列的问卷数据转为「国家-问题-选项」的长表结构,便于统一分组统计。
- 频次统计:通过
group_by()按国家、问题、选项三级分组,summarize(n())计算每组的响应次数。 - 宽格式输出:用
pivot_wider()将统计结果转回目标格式,列名自动生成为Q1_1、Q1_2这类「问题_选项」的形式,values_fill = 0确保未出现的选项频次显示为0而非缺失值。
可选优化
如果原数据中存在未填写的问卷选项(即option为NA),可以保留代码中的filter(!is.na(option))来排除这类无效记录,避免统计无效频次。
内容的提问来源于stack exchange,提问作者vzw617
相关产品推荐
相关产品推荐

