如何按列分组重塑二进制数据并统计?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
相关产品推荐
相关产品推荐

