我想创建一个可以在R中格式化的表格,以按计数汇总人口统计数据。例如,我有一个数据框(下面的示例),其中包含有关性别,性行为和残疾的信息。我想要一个表来显示有多少人标识为男性,女性,异性恋,同性恋等。因此,基本上,我想要等效于table(df $ gender)函数,但在一个表中具有多个变量。理想情况下,可以对其进行格式化以使其美观,然后将其导出。
这里的代码创建可复制的数据框(尽管在我的真实df中,我有多余的列,我不想包含在表中):
gender <- c('female','male','male','female','male')
sexuality <- c('heterosexual','bisexual','heterosexual','asexual','homosexual')
disabled <- c('no','no','yes','no','yes')
fake.data <- data.frame(gender,sexuality,disabled)
我想要一个看起来像这样的表:
**Gender**
Male: 3
Female: 2
**Sexuality**
Heterosexual: 2
etc etc
我该怎么做?
提前感谢!
您可以在每一列上调用table
:
sapply(fake.data, table)
#$gender
#female male
# 2 3
#$sexuality
# asexual bisexual heterosexual homosexual
# 1 1 2 1
#$disabled
# no yes
# 3 2
取决于要对表具有的复杂程度,可以使用aggregate
:
aggregate(
x = fake.data$sexuality[fake.data$disabled=="no"],
by = list(fake.data$gender[fake.data$disabled=="no"]),
function(x) table(x))
Group.1 x.asexual x.bisexual x.heterosexual x.homosexual
1 female 1 0 1 0
2 male 0 1 0 0
或:
aggregate(
x = fake.data$sexuality[fake.data$disabled=="yes"],
by = list(fake.data$gender[fake.data$disabled=="yes"]),
function(x) table(x))
Group.1 x.asexual x.bisexual x.heterosexual x.homosexual
1 male 0 0 1 1