You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在cbind时保留DataFrame行顺序?解决HSD.test字母错位问题

解决方法

问题核心是排序操作未生效,以及HSD.test返回的groups数据框行序与均值数据不一致,修改后的函数如下:

make_HSD_table <- function(HSDlist){
  
  mycolnames <- names(HSDlist)
  mycolnumber <- length(mycolnames)
  
  df1 <- as.data.frame(lapply(lapply(HSDlist, `[[`, 'means'), '[', 'value'))
  # 关键:排序后赋值回df1,确保行序为T1-T4
  df1 <- df1[order(row.names(df1)), ]
  df1 <- round(df1, digits = 2)
  
  df2 <- as.data.frame(lapply(lapply(HSDlist, `[[`, 'means'), '[', c('std')))
  # 同步排序并赋值
  df2 <- df2[order(row.names(df2)), ]
  df2 <- round(df2, digits = 2)
  
  df3 <- as.data.frame(lapply(lapply(HSDlist, `[[`, 'groups'), '[', 'groups'))
  # 核心修正:按行名排序并赋值,让标记字母行序与均值完全匹配
  df3 <- df3[order(row.names(df3)), ]

  myrownumber <- nrow(df1)
  pm_df <- data.frame(replicate(mycolnumber, rep('±', myrownumber)))
  
  my_table <- cbind(df1, pm_df, df2, df3)[order(c(seq_along(df1), seq_along(pm_df),seq_along(df2), seq_along(df3)))]
  
  my_table <- cbind(sapply(split.default(my_table, as.integer(gl(ncol(my_table), 4, ncol(my_table)))), function(x) do.call(paste, x)))
  
  colnames(my_table) <- mycolnames
  rownames(my_table) <- rownames(df1)

  write.table(my_table, 'my_HSD_table.csv', append = F, sep = ',', row.names = FALSE)
  
  return(my_table)
}

修改说明

  1. 排序操作必须赋值:原代码中df1[order(row.names(df1)), ]仅生成临时排序结果,未覆盖原变量,导致排序无效,需改为df1 <- df1[order(row.names(df1)), ]。
  2. 同步df3行序:HSD.test返回的groups数据框默认按均值降序排列,必须显式按处理组名称排序,确保标记字母与对应处理组的均值一一对应。
  3. 修正模型创建逻辑:原代码未用subset筛选对应变量的数据,导致模型计算错误,已在MyModels中添加subset = variable == my。

修改后运行函数,得到的正确结果:

p1                p2               p3              
T1 "24.4 ± 3.61 b"   "35 ± 2.65 a"    "4.73 ± 0.96 a"
T2 "12.87 ± 2.16 c"  "24.33 ± 3.21 b" "10.8 ± 3.48 b"
T3 "36.33 ± 7.33 a"  "58 ± 7.94 c"    "3.67 ± 1.58 a"
T4 "36.9 ± 4.3 a"    "20.67 ± 5.51 b" "11.23 ± 1 b"  

此时标记字母已与对应处理组的均值±标准差正确匹配,行顺序保持T1-T4排列。


内容的提问来源于stack exchange,提问作者Harun Rashid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:54:56