【问题标题】:Write results paired t.test in csv将结果配对 t.test 写入 csv
【发布时间】:2025-12-08 20:45:01
【问题描述】:

我正在对多个组的数据进行配对 t 检验,并希望将其“导出”到 .csv 文件中

这是数据:

 table <- read.table(text=' group    M1      M2
 Group 1 0.5592884 0.5592884
 Group 1 0.3481799 0.3481799
 Group 1 0.2113786 0.2113786
 Group 1 0.2817871 0.2817871
 Group 2 0.2543952 0.2543952
 Group 2 0.2016288 0.2016288
 Group 2 0.2098503 0.2098503
 Group 2 0.1060097 0.1060097
 Group 3 0.2405704 0.2405704
 Group 3 0.3200119 0.3200119
 Group 3 0.2453895 0.2453895
 Group 3 1.3107510 1.3107510
 Group 4 0.8600338 0.8600338
 Group 4 0.5381423 0.5381423
 Group 4 0.7348685 0.7348685
 Group 4 0.2969512 0.2969512', header=TRUE)

因为我不想比较 M1 和 M2,而是将组相互比较,所以我执行配对 t.test 如下:

sig<-lapply(table[2:3], function(x) 
  pairwise.t.test(x, table$group,
                  p.adjust.method = "BH"))

但是,由于结果是一个列表,我无法将其写入 .csv 文件中:

sink('test.csv')
cat('paired t results')
write.csv(sig)
sink()

我试图通过使用capture.output 来解决问题,但这会失去分离

sig_output<-capture.output(print(sig))

有没有办法直接将sig 写入 csv 文件或解决方法?

谢谢!

【问题讨论】:

    标签: r csv t-test


    【解决方案1】:

    只需在sink 之后使用print

    print(sig)
    

    但请注意,结果不是 CSV 文件,这与您的代码所说的相反。如果您只想保存 p 值表,可以执行以下操作:

    save_p_values = function (test_data, filename) {
        write.csv(test_data$p.value, filename)
    }
    
    Map(save_p_values, sig, paste0(names(sig), '.csv'))
    

    要在同一个文件中获取两个表,需要添加一个列来区分它们;使用‹dplyr›:

    sig_combined = sig %>%
        # Extract p-value tables
        map(`[[`, 'p.value') %>%
        # Convert matrix to data.frame so we can work with dplyr
        map(as.data.frame) %>%
        # Preserve rownames by saving them into column:
        map(tibble::rownames_to_column, 'Contrast') %>%
        # Add name of column that t-test was performed on
        map2(names(.), ~ mutate(.x, Col = .y)) %>%
        # Merge into one table
        bind_rows()
    
    write.csv(sig_combined, 'results.csv')
    

    【讨论】:

    • 谢谢,第二个选项很适合我!我有没有机会将 M1 和 M2 的结果写入一个文件而不是两个文件?干杯:)
    • @KevinRoth 是的,您可以在write.csv 中设置append = TRUE 参数,然后使用相同的文件名。但在那种情况下,我可能只是先连接表,然后再写一次。
    • @KevinRoth 查看更新的答案。这是一个多一点的努力。如果你不熟悉我用过的包,推荐应该会有所帮助。简而言之,purrr::map is like lapply on steroids 和 dplyr 是 R 中结构化表操作的未来。
    • 哇。谢谢你。这远远超出了我的 R 能力,所以现在,我将复制粘贴它并尝试使其适用于我的实际数据集。再次,非常感谢!
    • 完美运行。我可以将此解决方案应用于具有更多列的表吗,因为输入表可以是 1 到 +10 列之间的任何内容(抱歉给您带来不便)