【问题标题】:Create n-way frequency tables using R使用 R 创建 n 向频率表
【发布时间】:2016-05-12 12:13:50
【问题描述】:

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

我正在使用下面的代码:

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

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

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

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

【问题讨论】:

  • 很多人在 Stack Overflow 上使用标签来搜索他们了解/感兴趣的问题。如果您不将语言添加为标签,您的问题将不会获得很多浏览量。

标签: r reporting frequency-distribution


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多