1

我需要一些帮助来创建一个 n 向频率表。

我正在使用下面的代码:

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

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

表格1

但是由于 VAR2 和 VAR3 有几个类别,所以我得到了很多带有“0”的行,而我要删除这些行以保留在 VAR2 的哪个类别中,仅针对真正具有频率值的 VAR3 类别的频率,如下所示:

第一个表的情况和第二个表的期望输出

有谁知道如何做到这一点,要么通过对我首先创建的表进行子集化,要么使用另一个函数,该函数不返回每个 VAR2 类别中的所有 VAR3 级别,而只返回实际具有频率的那些?

4

1 回答 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
于 2016-02-03T12:16:55.040 回答