使用R

时间:2016-02-03 10:36:57

标签: r reporting frequency-distribution

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

我正在使用以下代码:

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

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

Table 1

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

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

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

1 个答案:

答案 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