如何从R中的测试中获取测试统计数据,例如当使用所选列应用于整个数据框时,'fisher.test()'。我知道如何手动完成,例如拍摄p.value:
fisher.test(matrix(c(9,0,1,1),ncol=2))$p.value
给出:
[1] 0.1818182
我需要从fisher.test()
获取p.value并估算数据框,并查看this SE question我受到启发,可以创建这样的函数:
fisher <- function(a,b,c,d){
data <- matrix(c(a,b,c,d),ncol=2)
c(p = fisher.test(data)$p.value,
OR = fisher.test(data)$estimate)
}
这也像:
fisher(9,0,1,1)[[1]]
并给我与上述相同。 但是,如何将其用于data.frame,例如使用mutate?
添加名为'p'的列require(plyr)
require(dplyr)
data <-
data.frame(v1=c(9,10,2,2),
v2=c(0,8,0,0),
v3=c(1,1,0,9),
v4=c(1,2,3,4))
data %>%
mutate(p=fisher(v1,v2,v3,v4)[[1]])
不起作用(它为所有行提供相同的值)。我是否需要以某种方式“应用”或者可以使用dplyr::do
完成?
答案 0 :(得分:3)
像这样使用'hrwise()':
fisher <- function(a,b,c,d){
data <- matrix(c(a,b,c,d),ncol=2)
c(p = fisher.test(data)$p.value,
OR = fisher.test(data)$estimate)
}
data %>%
rowwise()%>%
mutate(p=fisher(v1,v2,v3,v4)[[1]],
OR=fisher(v1,v2,v3,v4)[[2]])
而且 - 从上面的数据 - 我们得到:
v1 v2 v3 v4 p OR
1 9 0 1 1 0.1818182 Inf
2 10 8 1 2 0.5864662 2.394164
3 2 0 0 3 0.1000000 Inf
4 2 0 9 4 1.0000000 Inf