0

我有一个db包含 2 个分类变量的数据框:varA有 4 个级别(0123),varB有 2 个级别(yesno)。varB没有级别 0 的值varA

id  varA    varB
1   2       yes
2   3       no
3   3       no
4   1       yes
5   0       NA
6   1       no
7   2       no
8   3       yes
9   3       yes
10  2       no

我使用包创建了一个列联表CrossTabledescr然后使用以下plot函数创建了一个马赛克图:

table <- CrossTable(db$varA,db$varB, missing.include=FALSE)
plot(table,xlab="varA",ylab="varB")

我得到了这个情节:

马赛克图

我想从情节中消除 0 级。我还想添加 2 个 y 轴,一个在图的左侧,比例从 0 到 1,一个在右侧,比例从 1 到 0。

你可以帮帮我吗?

4

1 回答 1

0

嗯,很烦人。不支持对此类“CrossTable”对象进行子集化。如果它是一个表现良好的类似表格的对象,您将能够只传递table[ , -1]给 plot 函数。相反,您需要在传递给 CrossTable 的数据之前进行细分:

table <- with( na.omit(db), CrossTable( varA, varB, missing.include=TRUE))
plot(table, xlab="varA", ylab="varB")

顺便说一句,使用table数据对象的名称对于普通的 R 用户来说是相当混乱的,因为该table函数是我们的基本工具之一。

就我个人而言,我会避免使用该 CrossTable 函数,因为它的输出非常奇怪并且无法使用典型的 R 函数进行管理。是的,我知道它会产生类似 SAS 的输出,但是 R 用户越来越喜欢该table函数的紧凑输出以及可用于处理表对象的许多矩阵运算。您可能需要手动获取您的保证金百分比prop.table

于 2013-12-01T17:55:39.233 回答