我有一个约3k研究人员测量的约50k测量数据框。
INVESTIGATOR_ID \\\ SAMPLE_ID \\\ MEASUREMENT 1000 \\\ 38942 \\\ 20.1 1000 \\\ 38942 \\\ 10.2 1001 \\\ 38432 \\\ 5.6 1002 \\\ 553 \\\ 10.6 ...
我的目标是将每位研究者的样本测量值与整个数据集的测量值进行比较:
我已使用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测试,并创建结果的新数据框?
感谢您的任何建议。
答案 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)