在R中的数据帧的每一行上运行Fisher测试

时间:2013-02-20 15:26:19

标签: r matrix dataframe

我有一个约3k研究人员测量的约50k测量数据框。

INVESTIGATOR_ID \\\ SAMPLE_ID \\\ MEASUREMENT
1000            \\\ 38942     \\\ 20.1
1000            \\\ 38942     \\\ 10.2
1001            \\\ 38432     \\\ 5.6
1002            \\\ 553       \\\ 10.6
...

我的目标是将每位研究者的样本测量值与整个数据集的测量值进行比较:

  1. 对于每位研究者,计算那些与该研究者收集的测量平均值相差+/-一个标准差的测量值。
  2. 对于整个数据框,计算那些与平均值相差+/-一个标准差的测量值。
  3. 对于每个具有样本测量值+/-与平均值相差一个标准偏差的研究者,进行Fisher精确检验以确定样本数量是否显着(与整个数据框架相比)。
  4. 我已使用Plyr库(ddply)按INVESTIGATOR_ID汇总数据。将数据合并在一起,最终结果是一个数据框,其中每一行包括一个研究者ID,该研究者测量的样本数,该研究者测量的样本数+/- 1 SD,15000和50000(其中15000)和50000是相应的样本编号+/- 1 SD和整个数据帧的样本总数。)

    INVESTIGATOR_ID \\\ NUMBER_OF_SAMPLES \\\ NUMBER_OF_SAMPLES_SD \\\ 15000 \\\ 50000
    

    如何获取数据帧的每一行,将字段c(2:5)转换为矩阵,运行Fisher测试,并创建结果的新数据框?

    感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

类似的东西(改编自我的剧本,可能需要更多修改以满足您的需求):

get_fisher <- function(df){
  mat <- matrix(as.numeric(df[c(2:5)]), ncol=2)
  f <- fisher.test(as.table(mat), alt="two.sided")
  return(c(df[1], f$p.value))
}

fishers <- apply(df, 1,  get_fisher)