我的数据框db
包含2个分类变量:varA
有4个级别(0
,1
,2
,3
) ,varB
有2个级别(yes
,no
)。 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")
我获得了这个情节:
我想消除情节中的0级。我还想添加2个y轴,一个在绘图的左边,刻度从0到1,一个在右边,刻度从1到0。
你能帮帮我吗?
答案 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
获得保证金百分比。