Using R, is it possible to get a frequency table where no data exist?

回眸只為那壹抹淺笑 提交于 2019-12-08 07:26:21

问题


I am producing some demographic tables, to include race, sex, and ethnicity. One of the tables is a crosstab of sex and race by ethnicity (Hispanic / not Hispanic). So far, there are no Hispanic participants in the study, but the table needs to be produced and sent to interested parties (i.e., regulatory agencies).

However, I have not been able to produce a table for the report. Obviously, the table would be all zeroes, but it is not being produced at all. It seems that this is a limitation of trying to calculate something that does not exist...

I have included example data below:


race.in <- read.table(
text = "race eth sex
b   n   f
b   n   f
b   n   f
w   n   f
w   n   m
w   n   m
a   n   m
a   n   m
a   n   f
ai  n   m
ai  n   f
ai  n   m", header = TRUE)

attach(race.in)

race.levels <- c("b", "w", "a", "ai", "nh") 
eth.levels  <- c("h", "n")  # hispanic , not hispanic
sex.levels  <- c("m", "f")


#  this table is fine
table(factor(race, levels = race.levels), factor(sex, levels = sex.levels) )

#  this table is fine
table(factor(eth, levels = eth.levels), factor(sex, levels = sex.levels) )

#  table of race and ethnicity by sex
by(race.in, sex, FUN = function(X)  table(factor(race, levels = race.levels), factor(eth, levels = eth.levels) ))  

#  produces NULL for table for levels of "h"
by(race.in, factor(eth, levels = eth.levels), FUN = function(X)  table(factor(race, levels = race.levels), factor(sex, levels = sex.levels) ))

Is there any way to produce a table of zeroes? I know it's silly, but we have to report this, even though there is no data for this set of conditions...


回答1:


I'm not clear why you don't just factor your variables in your data.frame. That makes creating tables much easier.

race.in$race <- factor(race.in$race, race.levels)
race.in$eth <- factor(race.in$eth, eth.levels)
race.in$sex <- factor(race.in$sex, sex.levels)
table(race.in)
table(race.in[c(1, 3, 2)])
# , , eth = h
# 
#     sex
# race m f
#   b  0 0
#   w  0 0
#   a  0 0
#   ai 0 0
#   nh 0 0
# 
# , , eth = n
# 
#     sex
# race m f
#   b  0 3
#   w  2 1
#   a  2 1
#   ai 2 1
#   nh 0 0

You may also be interested in exploring the ftable function (for "flat" tables). For example:

> ftable(x=race.in, row.vars=1, col.vars=2:3)
     eth h   n  
     sex m f m f
race            
b        0 0 0 3
w        0 0 2 1
a        0 0 2 1
ai       0 0 2 1
nh       0 0 0 0


来源:https://stackoverflow.com/questions/16065501/using-r-is-it-possible-to-get-a-frequency-table-where-no-data-exist

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!