Fisher使用dplyr :: mutate对数据框架进行测试

时间:2015-03-10 14:49:23

标签: r dataframe dplyr

如何从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完成?

1 个答案:

答案 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