为R模拟的多元分类数据构建占比矩阵 缺失类别占比记为0
实现代码
方法1:Base R 实现
# 导入你的数据 data <- structure(c(1, 0, 2, 1, 0, 0, 1, 2, 2, 1, 3, 8, 3, 3, 2, 2, 6, 3, 10, 8, 2, 5, 2, 6, 3, 3, 4, 3, 5, 5), .Dim = c(10L, 3L), .Dimnames = list( NULL, NULL)) # 提取所有列出现过的唯一类别并排序 all_cats <- sort(unique(as.vector(data))) # 逐列计算占比,不存在的类别自动补0 prop_mat <- apply(data, 2, function(x) { prop.table(table(factor(x, levels = all_cats))) }) # 整理为要求的输出格式 result <- data.frame( 类别 = rownames(prop_mat), prop_mat, row.names = NULL, check.names = FALSE ) colnames(result) <- c("类别", "X1", "X2", "X3")
运行后打印result即可得到目标输出:
类别 X1 X2 X3 1 0 0.3 0.0 0.0 2 1 0.4 0.0 0.0 3 2 0.3 0.2 0.2 4 3 0.0 0.4 0.3 5 4 0.0 0.0 0.1 6 5 0.0 0.0 0.3 7 6 0.0 0.1 0.1 8 8 0.0 0.2 0.0 9 10 0.0 0.1 0.0
方法2:tidyverse 实现
如果习惯使用tidyverse语法,可以用以下代码实现:
library(tidyverse) result <- as.data.frame(data) %>% rename(X1 = V1, X2 = V2, X3 = V3) %>% pivot_longer(everything(), names_to = "var", values_to = "类别") %>% count(var, 类别) %>% group_by(var) %>% mutate(prop = n / sum(n)) %>% ungroup() %>% pivot_wider(id_cols = 类别, names_from = var, values_from = prop, values_fill = 0) %>% arrange(类别)
内容的提问来源于stack exchange,提问作者Bernice
相关产品推荐
相关产品推荐

