在R中如何提取单列内多个变量并按分组计算受访者百分比均值
问题背景
- 现有数据集单列存储多变量,数据集视图如下:

- 核心需求:从
question列提取6个唯一问题变量,匹配对应受访者百分比数值,按国家、性别分组后计算每个问题对应的受访者百分比均值,最终输出包含国家、年份、各问题对应百分比均值的宽表。 - 此前直接使用
pivot_wider()转换宽表未得到预期结果,错误输出示例如下:
- 原有运行代码:
dff2 <- df2 %>% pivot_wider(names_from = 'Question', values_from = 'Percentage of respondents')
修正方案
直接调用pivot_wider()会因为同分组下存在多个重复观测生成列表列,无法得到均值结果,需要先完成分组聚合再转宽表,修正后代码如下:
# 需提前加载dplyr、tidyr包 library(tidyverse) dff2 <- df2 %>% # 按国家、年份、性别、问题维度分组,计算百分比均值 group_by(Country, Year, Gender, Question) %>% summarise(avg_perc = mean(`Percentage of respondents`, na.rm = T), .groups = "drop") %>% # 转宽表,将问题转为列名,值为对应均值 pivot_wider(names_from = Question, values_from = avg_perc)
注:
group_by中的列名需替换为你实际数据集里的对应字段名;na.rm=T会自动过滤百分比列的空值,不需要可删除该参数。
内容的提问来源于stack exchange,提问作者Hayleyaw
相关产品推荐
相关产品推荐

