使用R创建n路频率表

我需要一些帮助来创建一个n路频率表 .

我使用下面的代码:

tab <- table(VAR1,VAR2,VAR3)
finaltab <- ftable(tab,row.vars=c(2,3))
print(finaltab)

VAR1,VAR2和VAR3都是因子变量 . 通过这样做,我生成下表:

Table 1

但是由于VAR2和VAR3有几个类别,我得到了许多带有“0”和I的行,我删除了这些行以保留VAR3类别中仅具有频率值的VAR3类别的频率,如下所示:

First table with the situation and second table with the desired output

有没有人知道怎么做,要么通过对我先创建的表进行子集化,要么使用另一个不返回每个VAR2类别中VAR3的所有级别的函数,而只是那些实际上有频率的函数?

回答(1)

2 years ago

列联表在每个类别中具有相同的行数 . 如果从一个类别中删除行,则不再有表格而是矩阵 .

t <- structure(c(0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L), .Dim = c(3L, 2L, 3L), .Dimnames = structure(list(c("A", "B", "C"), c("A", "B"), c("A", "B", "C")), .Names = c("","", "")), class = "table")
> (ft <- ftable(t, row.vars=c(2,3)))
     A B C

A A  0 0 1
  B  1 1 1
  C  0 1 0
B A  1 1 0
  B  0 0 0
  C  1 1 1
> ft[apply(ft, 1, any), ]
     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    1    1    1
[3,]    0    1    0
[4,]    1    1    0
[5,]    1    1    1

对表进行子集化的不幸影响是名称丢失 . 通过在获取子集之前将表强制转换为矩阵,可以在一定程度上减轻这种情况,但打印输出仍然不如竞争表的那样漂亮 .

> as.matrix(ft)[apply(ft, 1, any), ]

_     A B C
  A_A 0 0 1
  A_B 1 1 1
  A_C 0 1 0
  B_A 1 1 0
  B_C 1 1 1