2

我有一个由约 3k 调查人员进行的约 50k 测量的数据框。

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

我的目标是将每个调查员的样本测量值与整个数据集的测量值进行比较:

  1. 对于每个调查员,计算那些与该调查员收集的测量平均值相差 +/- 一个标准偏差的测量值。
  2. 对于整个数据框,计算那些与平均值相差 +/- 一个标准偏差的测量值。
  3. 对于每个具有样本测量值 +/- 一个标准偏差的调查员,运行 Fisher 精确检验以确定样本数量是否显着(与整个数据框相比)。

我使用 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 检验,并创建一个新的结果数据框?

感谢您的任何建议。

4

1 回答 1

4

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

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)
于 2013-02-20T15:59:52.000 回答