想象一下,我想为移动设备和性别创建一个列联表,以便设置以下数据:
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]
有什么想法吗?谢谢!
答案 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