R - 来自descr包的修改马赛克图

时间:2013-11-30 21:37:48

标签: r plot categorical-data

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

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

我使用CrossTable包中的descr创建了一个列联表,然后使用plot函数创建了一个马赛克图:

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

我获得了这个情节:

mosaic plot

我想消除情节中的0级。我还想添加2个y轴,一个在绘图的左边,刻度从0到1,一个在右边,刻度从1到0。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

嗯, 很烦人。不支持对这样的“CrossTable”对象进行子集化。如果它是一个表现良好的类似对象,你可以将table[ , -1]传递给绘图函数。相反,您需要在传递给CrossTable的数据之前进行子搜索:

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

使用名称table进行数据对象的BTW对于常规R用户来说非常混乱,因为table函数是我们的基本工具之一。

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