我需要一些帮助来创建一个n路频率表。
我正在使用以下代码:
tab <- table(VAR1,VAR2,VAR3)
finaltab <- ftable(tab,row.vars=c(2,3))
print(finaltab)
VAR1,VAR2和VAR3都是因子变量。通过这样做,我产生了下表:
但是由于VAR2和VAR3有几个类别,我得到了许多带有“0”的行,并且我删除了这些行以保留VAR3的哪个类别的频率仅适用于具有频率值的VAR3类别,如如下:
有没有人知道怎么做,要么通过对我先创建的表进行子集化,要么使用另一个不返回每个VAR2类别中所有VAR3级别的函数,而只是那些实际上有频率的函数?
答案 0 :(得分: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
对表进行子集化的不幸影响是名称丢失。这个 通过在之前将表强制转换为矩阵,可以在一定程度上减轻这种影响 采取子集,但打印输出仍然不如a 竞争表。
> 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