如何在 R 中合并频率 table 上的属性?

How to merge attributes on a frequency table in R?

假设我有两个变量。请参阅下面的虚拟数据:

共 250 条记录:

性别

男性:100

女性:150

头发

短:110

长:140

下面提供了我目前使用的代码,为每个变量创建了一个不同的 table:

sexTable <- table(myDataSet$Sex)
hairTable <- table(myDataSet$Hair)

View(sexTable):
|------------------|------------------|
|       Level      |    Frequency     |
|------------------|------------------|
|        Male      |       100        |
|       Female     |       150        |
|------------------|------------------|


View(hairTable)
|------------------|------------------|
|       Level      |    Frequency     |
|------------------|------------------|
|        Short     |       110        |
|        Long      |       140        |
|------------------|------------------|

我的问题是如何合并 R 中的两个 table 将具有以下格式以及计算每组级别的频率百分比:

|---------------------|------------------|------------------|
|      Variables      |       Level      |    Frequency     |
|---------------------|------------------|------------------|
|      Sex(N=250)     |        Male      |       100 (40%)  |
|                     |       Female     |       150 (60%)  |
|      Hair(N=250)    |        Short     |       110 (44%)  |
|                     |        Long      |       140 (56%)  |
|---------------------|------------------|------------------|

转换为data.frame

后我们可以使用bind_rows
library(dplyr)
bind_rows(list(sex = as.data.frame(sexTable),
       Hair = as.data.frame(hairTable)), .id = 'Variables')

使用可重现的例子

tbl1 <- table(mtcars$cyl)
tbl2 <- table(mtcars$vs)
bind_rows(list(sex = as.data.frame(tbl1), 
       Hair = as.data.frame(tbl2)), .id = 'Variables')%>% 
   mutate(Variables = replace(Variables, duplicated(Variables), ""))

如果我们还需要百分比

dat1 <- transform(as.data.frame(tbl1), 
  Freq = sprintf('%d (%0.2f%%)', Freq,   as.numeric(prop.table(tbl1) * 100)))
dat2 <- transform(as.data.frame(tbl2), 
  Freq = sprintf('%d (%0.2f%%)', Freq,   as.numeric(prop.table(tbl2) * 100)))
bind_rows(list(sex = dat1, Hair = dat2, .id = 'Variables')