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

如何按列分组重塑二进制数据并统计?data.frame转矩阵需求

实现data.frame的两种格式重塑

首先定义输入的data.frame:

df <- data.frame(
  Typ1 = c(1, 0, 1),
  Typ2 = c(1, 1, 0),
  Maths = c(1, 0, 1),
  Science = c(1, 1, 0),
  English = c(1, 0, 0),
  History = c(1, 0, 0)
)

生成期望输出1

输出1是将Typ1、Typ2作为行,计算每个类型在各科目上的总和,可通过矩阵乘法实现:

# 拆分类型列与科目列
typ_cols <- df[, c("Typ1", "Typ2")]
subject_cols <- df[, c("Maths", "Science", "English", "History")]

# 计算类型-科目总和矩阵
output1 <- t(typ_cols) %*% subject_cols

# 设置行名
rownames(output1) <- c("Typ1", "Typ2")

# 查看结果
output1

运行结果:

Maths Science English History
Typ1     2       2       1       1
Typ2     1       2       1       1

生成期望输出2

输出2需要将每行中值为1的类型单独拆成行,对应保留该行科目数据,用tidyverse工具实现:

library(tidyverse)

output2 <- df %>%
  # 将类型列转为长格式
  pivot_longer(cols = starts_with("Typ"), names_to = "Type", values_to = "Value") %>%
  # 筛选类型值为1的行
  filter(Value == 1) %>%
  # 移除冗余列并设置类型为行名
  select(-Value) %>%
  column_to_rownames("Type")

# 查看结果
output2

运行结果:

Maths Science English History
Typ1     1       1       1       1
Typ2     1       1       1       1
Typ2     0       1       0       0
Typ1     1       0       0       0

内容的提问来源于stack exchange,提问作者Murmulodi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:05:25