根据表函数给出的值制作列联表

时间:2014-07-23 19:55:52

标签: r contingency

我有这样的矢量:

> agg$RNAtype
 [1] "HnRn" "HyRy" "HnRn" "HyRn" "HnRn" "HnRn" "HnRn" "HnRn" "HnRy" "HnRn" "HnRy"
[12] "HnRn"

现在,当我使用表函数时,它提供以下内容:

> table(agg$RNAtype)

HnRn HnRy HyRn HyRy 
   8    2    1    1 

但我想制作一个2x2列联表(以矩阵的形式),其中第一行的值为HnRn和HyRn。第二行将具有HnRy和HyRy的值。我该怎么做?

我最终计划进行费希尔精确测试和chisquare测试。

2 个答案:

答案 0 :(得分:1)

vec <- scan(what="")
1: "HnRn" "HyRy" "HnRn" "HyRn" "HnRn" "HnRn" "HnRn" "HnRn" "HnRy" "HnRn" "HnRy"
12:  "HnRn"
13: 
Read 12 items

您希望对每个项目中的第2个和第4个字符进行交叉分类:

> table(substr(vec,4,4), substr(vec,2,2))

    n y
  n 8 1
  y 2 1

这有点冷,所以使用表格的标签功能来改进注释:

> tbl <- table(`4th`=substr(vec,4,4), `2nd`=substr(vec,2,2))
> tbl
   2nd
4th n y
  n 8 1
  y 2 1

表对象是fisher.test的合适输入:

> fisher.test(tbl)

    Fisher's Exact Test for Count Data

data:  tbl
p-value = 0.4545
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
   0.03405901 351.00812616
sample estimates:
odds ratio 
  3.463796 

答案 1 :(得分:0)

我认为@BonddedDust的答案更好,但是如果你只是想重新排列桌子,那么你可能会做到这一点

matrix(table(agg$RNAtype),nrow=2)

(正如@Henrik在上面的评论中指出的那样,这与?fisher.test?chisq.test中的示例非常类似......)

默认情况下,R在&#34; column-major&#34;中构造矩阵。订单,所以这应该按照你想要的方式获得条目的顺序。