如何在expsss生成的SPSS式表格表头中添加总案例数与频率统计
使用R语言expsss包生成带总案例数的SPSS风格统计表格
需求:生成SPSS风格的统计表格,要求在表头显示总案例数(总响应数),同时获取表头分组的频率分布情况。
示例数据
df <- data.frame( "TB1"=c("OPS", "OPS", "HR", "ADMIN", "HR", "ADMIN", "ADMIN", "HR", "HR", "HR", "Sales", "Sales", "Sales", "HR", "HR", "HR", "HR", "Sales", "Sales"), "TB2"=c("Sales", "ADMIN", "ADMIN", "Sales", "ADMIN", "ADMIN", "ADMIN", "HR", "HR", "HR", "HR", "HR", "HR", "OPS", "OPS", "OPS", "OPS", "HR", "HR"), "TB3"=c("ADMIN", "Sales", "OPS", "Sales", "HR", "ADMIN", "HR", "HR", "ADMIN", "ADMIN", "HR", "HR", "HR", "OPS", "HR", "OPS", "HR", "HR", "Sales"), "TB4"=c("Global", "Regional", "Regional", "Global", "Global", "Regional", "Regional", "Global", "Global", "Regional", "Regional", "Global", "Global", "Regional", "Global", "Regional", "Global", "Regional", "Global") )
生成带总案例数的SPSS风格表格
通过expsss包的total()函数自定义表头标签,结合cro_cpct生成符合要求的交叉表:
library(expsss) # 计算总案例数 total_n <- nrow(df) # 构建包含总计(带案例数标签)和TB4分组的banner banner <- with(df, list(total(label = paste("总计 (N =", total_n, ")")), TB4)) # 生成SPSS风格的交叉百分比表格,同时显示标签和数值 t1 <- cro_cpct(df$TB1, banner, show_labels = "both", total_row_position = "none") # 查看表格 t1
如果需要在TB4的每个分组表头单独标注该组案例数,可以进一步调整:
# 计算TB4各分组的案例数 tb4_group_n <- table(df$TB4) # 为每个分组添加带案例数的标签 for (group in names(tb4_group_n)) { df[[group]] <- df$TB4 == group attr(df[[group]], "label") <- paste(group, "(N =", tb4_group_n[group], ")") } # 重新构建banner并生成表格 banner <- with(df, list(total(label = paste("总计 (N =", total_n, ")")), df$Global, df$Regional)) t1 <- cro_cpct(df$TB1, banner, show_labels = "both") t1
获取表头分组的频率分布
直接使用基础R函数获取TB4分组的频数和占比:
# 获取TB4分组的频数 tb4_freq <- table(df$TB4) # 计算百分比 tb4_pct <- prop.table(tb4_freq) * 100 # 整理为结果数据框 freq_summary <- data.frame( 分组名称 = names(tb4_freq), 频数 = as.integer(tb4_freq), 百分比 = round(tb4_pct, 1) ) print(freq_summary)
输出结果示例:
分组名称 频数 百分比 1 Global 10 52.6 2 Regional 9 47.4
内容的提问来源于stack exchange,提问作者coder2learn
相关产品推荐
相关产品推荐

