我有 11 个变量 x 60 行的数据框;条目是二值因子(“男性”/“女性”)并包含 NA。(每行是一个家庭,最多有 11 名成员。因此列名为“A4M1”...“A4M11”)。
将“男性”、“女性”的总数制成表格以便可以绘制条形图的最简单范例是什么?理想情况下,我的输出将是一个长度为 2 的命名数字向量,即直接将因子作为因子进行运算,因此我们保留标签。
我一直在尝试重塑,融化,铸造,堆栈,制表,表格,colwise,总和,聚合,总结,by,plyr ...
我目前的工作代码是:
> tabulate(stack(colwise(as.numeric)(myData), na.rm=TRUE)$values)
[1] 162 151
这很糟糕,因为我不想强制使用数字并丢失标签。
请看下面我的回答
table(as.matrix(myData))
也不理想,因为它丢失了因子级别的顺序,并返回给我们标签的字母顺序。
tabulate()
似乎是最合适的fn。要将数据框转换为我使用的列表stack(..., na.rm=TRUE)$values
,这很笨重但可以完成工作。但是stack()
并不理想,因为它不适用于因子,因此我必须将其转换为colwise(as.numeric)(myData)
,这会丢弃标签。我可以重新应用factor(..., labels=c('Male','Female'))
到 的输出tabulate()
,但这很笨拙。那么,你能做得更好吗?(使用标准范例,而不是编写特定于案例的代码)
> head(myData)
A4M1 A4M2 A4M3 A4M4 A4M5 A4M6 A4M7 A4M8 A4M9 A4M10 A4M11
1 Female Male Male <NA> Male Male Male <NA> <NA> <NA> <NA>
2 Female Male Male <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
3 Female Male Male <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
4 Female Male Female <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
5 Female Male Male Female Female Male <NA> <NA> <NA> <NA> <NA>
6 Female Male Male <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
7 ...
> str(myData)
'data.frame': 60 obs. of 11 variables:
$ A4M1 : Factor w/ 2 levels "Male","Female": 2 2 2 2 2 2 1 2 2 2 ...
$ A4M2 : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 1 1 1 1 1 ...
$ A4M3 : Factor w/ 2 levels "Male","Female": 1 1 1 2 1 1 2 1 1 2 ...
$ A4M4 : Factor w/ 2 levels "Male","Female": NA NA NA NA 2 NA NA 1 NA 2 ...
$ A4M5 : Factor w/ 2 levels "Male","Female": 1 NA NA NA 2 NA NA 1 NA 2 ...
$ A4M6 : Factor w/ 2 levels "Male","Female": 1 NA NA NA 1 NA NA NA NA NA ...
$ A4M7 : Factor w/ 2 levels "Male","Female": 1 NA NA NA NA NA NA NA NA NA ...
$ A4M8 : Factor w/ 2 levels "Male","Female": NA NA NA NA NA NA NA NA NA NA ...
$ A4M9 : Factor w/ 2 levels "Male","Female": NA NA NA NA NA NA NA NA NA NA ...
$ A4M10: Factor w/ 2 levels "Male","Female": NA NA NA NA NA NA NA NA NA NA ...
$ A4M11: Factor w/ 2 levels "Male","Female": NA NA NA NA NA NA NA NA NA NA ...