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

如何汇总布尔Matrix:保留唯一行并统计出现次数及rev列求和

解决布尔矩阵分组汇总及rev列求和问题

嘿,我来帮你搞定这个问题!不管是最初的布尔矩阵去重统计次数,还是后来新增rev列后的分组求和,用R都能轻松实现,给你两种常用的方法参考:

一、初始需求:布尔矩阵保留唯一行并统计出现次数

先把你的示例矩阵转成可操作的对象:

# 构造初始布尔矩阵
mat <- matrix(c(
  TRUE, FALSE, FALSE, TRUE, FALSE,
  TRUE, TRUE, TRUE, FALSE, FALSE,
  TRUE, FALSE, FALSE, TRUE, TRUE,
  TRUE, TRUE, TRUE, FALSE, FALSE,
  TRUE, FALSE, FALSE, TRUE, FALSE
), nrow=5, byrow=TRUE, dimnames=list(1:5, c("A","B","C","D","E")))

方法1:用dplyr包(语法更直观)

先加载dplyr,然后分组汇总:

library(dplyr)

as.data.frame(mat) %>%
  # 按所有列分组
  group_by(across(everything())) %>%
  # 统计每组行数,作为total列
  summarise(total = n(), .groups = "drop")

方法2:用Base R(无需额外安装包)

把矩阵转成数据框后,用aggregate或者table处理:

df <- as.data.frame(mat)

# 用aggregate实现
agg_result <- aggregate(. ~ ., data=df, FUN=length)

# 或者用table转成数据框,重命名计数列
table_result <- as.data.frame(table(df))
colnames(table_result)[ncol(table_result)] <- "total"

运行后就能得到你想要的唯一行+出现次数的结果啦。

二、补充需求:新增rev列后,分组求和rev并统计次数

先构造你补充后的data.frame:

df_rev <- data.frame(
  A = c(TRUE, TRUE, TRUE, TRUE, TRUE),
  B = c(FALSE, TRUE, FALSE, TRUE, FALSE),
  C = c(FALSE, TRUE, FALSE, TRUE, FALSE),
  D = c(TRUE, FALSE, TRUE, FALSE, TRUE),
  E = c(FALSE, FALSE, TRUE, FALSE, FALSE),
  rev = c(2, 3, 5, 2, 1)
)

方法1:dplyr实现(推荐)

按A到E列分组,同时对rev求和、统计行数:

df_rev %>%
  # 按A-E列分组,也可以写成across(A:E)
  group_by(A, B, C, D, E) %>%
  summarise(
    rev = sum(rev),
    total = n(),
    .groups = "drop"
  )

方法2:Base R实现

用aggregate同时处理两个目标变量:

# 先给数据框新增一个临时的total列(值为1),再分组求和
base_result <- aggregate(cbind(rev, total) ~ A+B+C+D+E, 
                         data = transform(df_rev, total=1),
                         FUN = sum)

这样就能得到你要的:唯一行、rev列求和结果、以及每行出现次数的汇总表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:32