如何使用dplyr获取数据频率?附数据集与比例计算需求
计算tibble中各变量的选项占比(使用dplyr)
针对你想了解各数据占比的需求,这里提供一套基于dplyr的解决方案,步骤清晰且结果结构化:
首先,先把你的示例数据加载进来(如果已经有现成的数据框可以跳过这步):
library(dplyr) library(tidyr) # 你的示例tibble df <- tibble( freqtools = c(5,5,5,5,5,5), freqtrees = c(5,2,4,4,5,5), freqrt = c(5,2,4,4,4,5), freqroamfriends = c(5,2,3,3,1,5), freqroamalone = c(5,5,4,2,1,5), freqparts = c(5,4,3,1,4,5), freqmessy = c(5,5,4,2,5,5), freqride = c(5,4,2,1,5,5), freqall = c(1,0,1,1,1,1), freqrain = c(5,5,1,2,3,2) )
接下来是核心的占比计算代码:
proportion_df <- df %>% # 转成长格式,统一处理所有变量 pivot_longer(cols = everything(), names_to = "variable", values_to = "value") %>% # 按变量+取值分组,统计每个组合的出现次数 group_by(variable, value) %>% summarise(count = n(), .groups = "drop") %>% # 按变量分组,计算该变量下各取值的占比(转成百分比) group_by(variable) %>% mutate(proportion = count / sum(count) * 100) %>% # 排序让结果更易读 arrange(variable, value) # 查看最终结果 proportion_df
代码细节解释:
pivot_longer:把原来的宽表转成长表,每个变量名和对应的取值成为独立行——这是批量处理多变量统计的关键,不用重复写代码处理每个单独变量。- 分组统计次数:按
variable(变量名)和value(变量取值)分组后,用n()统计每个取值的出现次数,.groups = "drop"用来清理分组状态,避免后续步骤受干扰。 - 计算占比:再次按
variable分组,用每个取值的次数除以该变量的总次数,乘以100得到百分比形式的占比,直观展示分布情况。 - 排序整理:最后按变量名和取值排序,让结果的逻辑更清晰,方便对比查看。
如果需要让占比保留两位小数,优化可读性,可以修改mutate部分:
mutate(proportion = round(count / sum(count) * 100, 2))
运行后你会得到一个包含变量名、取值、出现次数和对应占比的tibble,完全满足你查看各数据占比的需求。
内容的提问来源于stack exchange,提问作者reubenmcg
相关产品推荐
相关产品推荐

