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
相关产品推荐
相关产品推荐

