我有一个来自csv的15个指标(列)的数据集。1个指标称为癌症
这是数据集中列的样子
Cancer: yes no yes no
我想创建一个包含百分比的表癌症是否但我正在制作不同的子集(例如过滤数据集1:年龄组50-54和数字亲属=1,过滤数据集2:agebirtfirstchild
示例数据集:
`cancer = c("yes", "no")
agegroup = c("35-39", "40-44")
numberrelatives = c("zero", "one")
agefirstchild = c("Age < 30", "Age 30 or greater")
df = data.frame(cancer, agegroup, numberrelatives, agefirstchild)`
是的,谢谢它在没有组的情况下部分工作,它给了我来自1个数据帧/数据集的摘要。但是我想在1个表中绘制不同的过滤数据帧/过滤数据集-
使用dplyr
您可以执行以下操作:
df %>%
group_by(agegroup, numberrelatives, agefirstchild) %>%
summarize(prop_cancer = mean(cancer == 'yes'))
请注意,表格将采用长格式(但有一些方法可以使其更宽)。
以下是一些使用base R的方法。但首先我们需要一些可重现的数据:
set.seed(42)
cancer <- sample(c("yes", "no"), 200, replace=TRUE)
agegroup <- sample(c("35-39", "40-44", "45-49"), 200, replace=TRUE)
numberrelatives <- sample(c("zero", "one", "2 or more"), 200, replace=TRUE)
agefirstchild <- sample(c("Age < 30", "Age 30 or greater", "nullipareous"), 200, replace=TRUE)
dat <- data.frame(cancer, agegroup, numberrelatives, agefirstchild)
现在您可以创建表:
(tbl <- xtabs(~agegroup+cancer, dat))
# cancer
# agegroup no yes
# 35-39 38 31
# 40-44 38 32
# 45-49 35 26
addmargins(tbl)
# cancer
# agegroup no yes Sum
# 35-39 38 31 69
# 40-44 38 32 70
# 45-49 35 26 61
# Sum 111 89 200
或百分比:
options(digits=3)
prop.table(tbl, 1) * 100
# cancer
# agegroup no yes
# 35-39 55.1 44.9
# 40-44 54.3 45.7
# 45-49 57.4 42.6
prop.table(tbl, 2) * 100
# cancer
# agegroup no yes
# 35-39 34.2 34.8
# 40-44 34.2 36.0
# 45-49 31.5 29.2