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

R语言使用arrange()函数重排数据框后未按新顺序打印输出问题

问题原因

你通过dplyr管道对df执行的行名转换、Treatment列因子化、排序操作均未将结果回存到df变量中,处理后的数据直接被丢弃,后续打印、导出的仍然是未排序的原始数据框。

修正后的代码
CR <- data2[data2$cv == "CR",]
colu <- CR[,c(5:7,9:36)]
vector <- c("L8", "L12", "H12", "H16")

for (i in colnames(colu)){
  ANOVA <- aov(reformulate(c('block', 'loc'), i), data=CR)
  ANOVA_SUMMARY <- summary(ANOVA)
  test1 <- HSD.test(ANOVA , "loc")
  df <- as.data.frame(test1$groups)
  # 此处将管道处理后的结果重新赋值给df
  df <- df %>%
    rownames_to_column(var = "Treatment") %>%
    mutate(Treatment = factor (Treatment, levels = vector)) %>%
    arrange(Treatment)
  print(ANOVA_SUMMARY)
  print(df)
  # 建议增加row.names = FALSE避免输出冗余行号
  write.table(df, file = "CR_output.txt", append=TRUE, row.names = FALSE)
}
补充说明
  • 如果你不需要修改原df,只是要按指定顺序打印,可以直接把管道操作后的结果传给print函数即可,不需要回存:
    print(df %>% rownames_to_column(var = "Treatment") %>% mutate(Treatment = factor (Treatment, levels = vector)) %>% arrange(Treatment))
    
  • 因子化Treatment列后即使不调用arrange,后续的打印、导出也会自动按你指定的levels顺序排列,两种写法都可以实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:12:01