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

如何在R中用purrr批量对数据框行与总观测值执行Fisher精确检验?

批量执行Fisher精确检验并添加P值列

准备工作

先加载所需的dplyr和purrr包,同时定义原始数据框:

library(dplyr)
library(purrr)

frequencies <- data.frame(row.names = c("a", "b", "c")
                          ,response = c(10, 7, 4)
                          ,no_response = c(12, 12, 7))

步骤1:计算总观测值

直接用colSums生成总观测值向量,无需转成数据框,更简洁:

total_vec <- colSums(frequencies)

步骤2:批量计算P值并合并到原数据框

这里提供两种符合purrr风格的实现方式:

方式1:用transpose() + map_dbl()

# 遍历每行生成P值向量
p_vals <- frequencies %>%
  transpose() %>%
  map_dbl(function(row) {
    # 构造2×2列联表:总观测值 + 当前行数据
    contingency_table <- rbind(total_vec, unlist(row))
    # 执行Fisher检验并提取P值
    fisher.test(contingency_table)$p.value
  })

# 将P值列添加到原数据框
frequencies$pval <- p_vals

方式2:用rowwise() + mutate()(更直观)

frequencies <- frequencies %>%
  rowwise() %>%
  mutate(pval = fisher.test(rbind(total_vec, c(response, no_response)))$p.value) %>%
  ungroup()

最终输出结果

运行代码后,frequencies会更新为目标格式:

> frequencies
# A tibble: 3 × 3
  response no_response  pval
     <dbl>       <dbl> <dbl>
1       10          12 0.803
2        7          12 1    
3        4           7 1    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:03:11