【发布时间】:2015-10-04 06:30:36
【问题描述】:
我搜索了类似的问题,但找不到所需的确切解决方案。 This 的问题有点类似,但只处理汇总多个连续变量的问题,而不是因子。
我有一个由 4 个因子变量(sex、agegroup、hiv、group)组成的数据框,例如
set.seed(20150710)
df<-data.frame(sex=as.factor(c(sample(1:2, 10000, replace=T))),
agegroup=as.factor(c(sample(1:5,10000, replace=T))),
hiv=as.factor(c(sample(1:3,10000, replace=T))),
group=as.factor(c(sample(1:2,10000, replace=T)))
)
levels(df$sex)<- c("Male", "Female")
levels(df$agegroup)<- c("16-24", "25-34", "35-44", "45-54", "55+")
levels(df$hiv)<-c("Positive", "Negative", "Not tested")
levels(df$group)<-c("Intervention", "Control")
我想创建一个汇总表,给出暴露变量sex、agegroup 和hiv 的每个级别的计数和比例,按group 分层。
编辑:这就是我的目标:
X N_Control Percent_Control N_Intervention Percent_Intervention
1 sex_Female 2517 0.5041057 2480 0.4953066
2 sex_Male 2476 0.4958943 2527 0.5046934
3 agegroup_16-24 1005 0.2012818 992 0.1981226
4 agegroup_25-34 1001 0.2004807 996 0.1989215
5 agegroup_35-44 1010 0.2022832 997 0.1991212
6 agegroup_45-54 976 0.1954737 996 0.1989215
7 agegroup_55+ 1001 0.2004807 1026 0.2049131
8 hiv_Negative 1679 0.3362708 1642 0.3279409
9 hiv_Not tested 1633 0.3270579 1660 0.3315359
10 hiv_Positive 1681 0.3366713 1705 0.3405233
但我无法让它与 dplyr 中的 summarise_each 一起使用;仅给出总体变量计数和比例,而不是每个因子水平:
df.out<-df %>%
group_by(group) %>%
summarise_each(funs(N=n(), Percent=n()/sum(n())), sex, agegroup, hiv)
print(df.out)
group sex_N agegroup_N hiv_N sex_Percent agegroup_Percent hiv_Percent
1 1 4973 4973 4973 1 1 1
2 2 5027 5027 5027 1 1 1
最后,是否有某种方法可以重塑表格(例如使用 tidyr),以便将暴露变量(性别、年龄组、艾滋病毒)报告为行?
谢谢
【问题讨论】:
-
以
ftable(group ~ sex + hiv + agegroup, data = df)之类的开头?