R语言中3-way table(三维列联表)如何按指定列值分组排序
完全可以实现这种分组排序需求,不需要拆分三维列联表的区块,直接通过操作数组维度或者转成数据框分组排序即可实现,以下是基于你给出的示例代码的可复现实现方案:
具体实现代码
你可以在你给出的生成df的代码后面追加以下代码:
# 方法1:保留三维表结构,每个地区独立按No列升序排列行 # 遍历每个地区分组 sorted_table <- lapply(dimnames(df)[[3]], function(reg) { # 提取当前地区的二维子表 region_sub <- df[, , reg] # 按No列的数值从小到大排序行 region_sub[order(region_sub[, "No"]), ] }) # 绑定地区名 names(sorted_table) <- dimnames(df)[[3]] # 查看排序后的英格兰分组结果 sorted_table$England # 方法2:转成整洁数据框后统一排序,适合后续分析 library(dplyr) df_tidy <- as.data.frame(df) %>% rename( 鸢尾花种类 = Var1, 结果 = Var2, 地区 = Var3, 计数 = Freq ) %>% # 按地区分组,每组内按结果、计数升序排列 group_by(地区, 结果) %>% arrange(计数, .by_group = TRUE) # 查看排序后的全量数据 View(df_tidy)
效果说明
上述代码执行后:
- 每个地区分组会独立计算排序规则,不会互相干扰
- 可以自定义排序逻辑:如果要按
Yes列排序,只需要把order(region_sub[, "No"])里的No改成Yes即可;如果要降序排列,改成order(-region_sub[, "No"])即可。
内容的提问来源于stack exchange,提问作者James Prentice
相关产品推荐
相关产品推荐

