我可以使用prop.table(table(data $ variable))获取R中的百分比吗?

时间:2019-05-24 04:37:08

标签: r percentage

我读到某处可以在R中使用prop.table(table())以获得比例表。但是,我为此获得的结果与手动计算有所不同(即查看table()然后除以NROW()。)我确定我可能在计算中犯了手动错误,但是我想确保使用prop.table(table())在逻辑上没有问题。

我正在使用按性别分类的调查数据,已将每种性别分为两个单独的数据集(即,女性<-data [data $ gender == 1]。我正在尝试识别性别差异,因此我想查看回复的细分百分比并进行比较。

scoreWomen <- c('a', 'a', 'a', 'b', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'e', 'e')
scoreMen <- c('a', 'b', 'b', 'c', 'c', 'c', 'c', 'd', 'd', 'd', 'e')
prop.table(table(scoreWomen))

#a          b          c          d          e 
#0.23076923 0.07692308 0.15384615 0.38461538 0.15384615 

table(scoreWomen)
#a b c d e 
#3 1 2 5 2 
NROW(scoreWomen)
#13

在小规模测试中,与上面的代码一样,手动计算与prop.table(table())的结果相同。但是,当我将它们与实际数据一起使用时,它们却大不相同,并且相差几个百分点。为什么会这样呢?是否对prop.table()或NROW()有误解?

1 个答案:

答案 0 :(得分:0)

如果数据集中有NA个元素,则值可能会有所不同

scoreWomen <- c(scoreWomen, NA)
prop.table(table(scoreWomen))
#scoreWomen
#         a          b          c          d          e 
#0.23076923 0.07692308 0.15384615 0.38461538 0.15384615 

table(scoreWomen)/NROW(scoreWomen)
#scoreWomen
#         a          b          c          d          e 
#0.21428571 0.07142857 0.14285714 0.35714286 0.14285714 

但是,可以通过在useNA = 'always'中指定table来阻止它

prop.table(table(scoreWomen, useNA = 'always'))
#scoreWomen
#        a          b          c          d          e       <NA> 
#0.21428571 0.07142857 0.14285714 0.35714286 0.14285714 0.07142857 

现在,它与NROW的计算值匹配,然后从表输出中删除<NA>元素

因此,这完全取决于是否需要通过删除NA元素来进行计算。 NROW不能区分NA

的出现