提问者:小点点

表%来自不同子集的分类变量[重复]


我有一个来自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)`

共3个答案

匿名用户

是的,谢谢它在没有组的情况下部分工作,它给了我来自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

相关问题