您可以使用aggregate。您可以保持矩阵不变,因为您可以使用as.data.frame,它会自动强制转换为可数因子。 NROW(大写)不区分矩阵和向量。
m.agg <- do.call(data.frame,
aggregate(. ~ Sex + Race, as.data.frame(Enroll_MajorA), function(x)
c(count=as.integer(NROW(x)), share=NROW(x) / NROW(Enroll_MajorA))))
为了获得完整的集合,我们可能会与 expand.grid 合并,我们可能需要稍微清理一下。
res <- merge(as.data.frame(m.agg), expand.grid(Sex=c("Female", "Male"),
Race=relevant.races), all=TRUE) # `relevant.races` below
res[, 3:4][is.na(res[, 3:4])] <- 0 # transform `NA` into 0 to be nice
res[order(res[, "Race"]), ] # order output
# Sex Race Maj.count Maj.share
# 1 Female Black 2 0.04
# 10 Male Black 0 0.00
# 2 Female Hawiian 1 0.02
# 3 Female Hispanic 1 0.02
# 11 Male Hispanic 0 0.00
# 4 Female Two or More Races 2 0.04
# 12 Male Two or More Races 0 0.00
# 5 Female White 44 0.88
# 13 Male White 0 0.00
# 6 Female Asian 0 0.00
# 14 Male Asian 0 0.00
# 7 Female Am. Indian 0 0.00
# 15 Male Am. Indian 0 0.00
# 8 Female Hawaiian 0 0.00
# 16 Male Hawaiian 0 0.00
# 9 Female Not Reported 0 0.00
# 17 Male Not Reported 0 0.00
数据
relevant.races <- c("Asian","Black", "Am. Indian", "Hawaiian" , "Hispanic", "White",
"Two or More Races", "Not Reported")
Enroll_MajorA <- structure(c("Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Major A", "Major A", "Major A",
"Major A", "Major A", "Major A", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Female", "Female", "Female", "White", "White",
"White", "Hawiian", "White", "White", "White", "White", "White",
"White", "White", "White", "White", "Two or More Races", "White",
"White", "White", "White", "White", "White", "White", "Hispanic",
"White", "White", "White", "White", "White", "White", "Two or More Races",
"White", "White", "White", "White", "White", "White", "White",
"White", "Black", "White", "White", "Black", "White", "White",
"White", "White", "White", "White", "White", "White", "White"
), .Dim = c(50L, 3L), .Dimnames = list(NULL, c("Maj", "Sex",
"Race")))