首页 文章

使用R创建n路频率表

提问于
浏览 1672
1

我需要一些帮助来创建一个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 回答

  • 0

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

    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
    

相关问题