如何将数据帧转换为R中的列联表?

kin*_*182 2 r contingency dataframe

我有一个简单的问题.如何将数据帧转换为Fisher精确测试的列联表?

我有data大约19000行:

head(data)

          R_T1   R_T2    NR_T1  NR_T2
GMNN      14      60     70     157
GORASP2    7      67     39     188
TTC34      5      69     41     186
ZXDC       8      66     37     190
ASAH2      9      65     46     181
Run Code Online (Sandbox Code Playgroud)

我想将每一行转换为列联表来执行Fisher精确检验.例如,对于GMNN:

       R   NR
T1    14   70
T2    60  157

fisher.test(GMNN, alternative="two.sided")

Fisher's Exact Test for Count Data

data:  GMNN
p-value = 0.05273
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.2531445 1.0280271
sample estimates:
odds ratio 
0.5243787 
Run Code Online (Sandbox Code Playgroud)

由于我有19000行数据,我宁愿输出为:

          R_T1   R_T2    NR_T1  NR_T2    p-value    odds_ratio
GMNN      14      60     70     157      0.05273    0.5243787 
GORASP2    7      67     39     188       0.1367     0.504643
TTC34      5      69     41     186      0.02422    0.3297116
ZXDC       8      66     37     190       0.3474    0.6233377
ASAH2      9      65     46     181       0.1648    0.5458072
Run Code Online (Sandbox Code Playgroud)

我迷失了如何做到这一点.有人可以帮忙吗?谢谢!

mt1*_*022 5

您可以将每行转换为列联表matrix:

ft.res <- apply(data, 1, function(x){
    t1 <- fisher.test(matrix(x, nrow = 2))
    data.frame(p_value = t1$p.value, odds_ratio = t1$estimate)
})

cbind(data, do.call(rbind, ft.res))
#         R_T1 R_T2 NR_T1 NR_T2    p_value odds_ratio
# GMNN      14   60    70   157 0.05273179  0.5243787
# GORASP2    7   67    39   188 0.13671487  0.5046430
# TTC34      5   69    41   186 0.02421765  0.3297116
# ZXDC       8   66    37   190 0.34744964  0.6233377
# ASAH2      9   65    46   181 0.16478480  0.5458072
Run Code Online (Sandbox Code Playgroud)