You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:24:02