R语言ftable操作:如何在频数表数值旁添加对应列百分比
实现ftable多维频数表添加列百分比的方法
核心思路:ftable本质是结构化的列联表,我们可以先将其转为普通矩阵计算列百分比,再将频数与百分比拼接后还原为ftable格式即可,全程可以用R基础包实现,无需额外依赖。
完整实现代码如下:
# 原有示例代码 year <- c(2000,2000,2000,2001,2001,2001,2002,2002,2002) county <- c("A","B","C","A","B","C","A","B","C") score <- c("High","High","Low","Low","Low","High","High","High","Low") df <- data.frame(year,county,score) tb <- ftable(year ~ county + score, data=df) # 新增列百分比处理代码 # 1. 将ftable转为矩阵方便计算 tb_mat <- as.matrix(tb) # 2. 计算列百分比,margin=2表示按列求和,结果保留1位小数 tb_pct <- round(prop.table(tb_mat, margin = 2) * 100, 1) # 3. 拼接频数和百分比 tb_comb <- matrix( paste0(tb_mat, "(", tb_pct, "%)"), nrow = nrow(tb_mat), dimnames = dimnames(tb_mat) ) # 4. 还原为ftable格式,保持原有行变量层级 tb_final <- as.ftable(tb_comb, row.vars = c("county", "score")) # 查看最终结果 print(tb_final)
输出效果如下:
year 2000 2001 2002 county score A High 1(33.3%) 0(0.0%) 1(33.3%) Low 0(0.0%) 1(33.3%) 0(0.0%) B High 1(33.3%) 0(0.0%) 1(33.3%) Low 0(0.0%) 1(33.3%) 0(0.0%) C High 0(0.0%) 1(33.3%) 0(0.0%) Low 1(33.3%) 0(0.0%) 1(33.3%)
补充说明:如果需要调整百分比的小数位数,修改round函数的第二个参数即可;如果需要计算行百分比,把prop.table的margin参数改为1即可。
内容的提问来源于stack exchange,提问作者HSC
相关产品推荐
相关产品推荐

