R表xtab:以排除因子为条件的列联表

时间:2016-01-21 18:44:38

标签: r crosstab

想象一下,我想为移动设备和性别创建一个列联表,以便设置以下数据:

df<-data.frame(read.table(header = TRUE, text = 
"Age    Gender  Mobile
13  Male    1
14  Female  1
18  Female  1
13  Male    1
13  Female  1
14  Female  0
16  Male    1
16  Female  0
16  Male    0
20  Male    0
14  Male    0
13  Female  0
25  Male    1
13  Female  0
24  Female  0"))

我会按照以下方式进行:

df$Gender<-factor(df$Gender)
df$Mobile<-factor(df$Mobile)
prop.table(xtabs(~Mobile+Gender, df))

工作正常。现在,想象一下,我想为18以上的样本子集编译性别和移动表格。你会怎么做?我尝试了以下无济于事:

prop.table(xtabs(~Mobile+Gender, df[df$Age>18]))

prop.table(xtabs(~Mobile+Gender[df$Age>18], df))

prop.table(xtabs(~Mobile+Gender, df))[df$Age>18]

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我们需要Age > 18 droplevels的行,如果我们需要在子集后删除未使用的级别,请使用xtabs,使用prop.table(xtabs(~Mobile+Gender, droplevels(df[df$Age>18,]))) 获取表并转换为比例。

{{1}}

答案 1 :(得分:0)

只需在您的第一次尝试中添加,也会达到目的:

> prop.table(xtabs(~ Mobile + Gender, df[df$Age > 18,]))
      Gender
Mobile       Female         Male
     0 0.3333333333 0.3333333333
     1 0.0000000000 0.3333333333

没有必要降低表格中未出现的因素的水平:

> prop.table(xtabs( ~ Mobile + Gender, droplevels(df[df$Age > 18,])))
      Gender
Mobile       Female         Male
     0 0.3333333333 0.3333333333
     1 0.0000000000 0.3333333333