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

在R中基于两个三分类列统计组合出现次数的问题

问题描述

我有两个分类数据列,二者为不同分类,但均包含0、1、2三个水平。想要统计这些分类组合的出现次数,但当前统计得到的countMB均为该列的总和153,无法得到各组合的实际次数。

当前输出结果

Groups:   dfMBG$datasetG.snelheid [3]
  dfMBG$datasetG.snelheid as.character(dfMBG$~ countMB
  <chr>                     <chr>                    <dbl>
1 0                         0                          153
2 0                         1                          153
3 0                         2                          153
4 1                         0                          153
5 1                         1                          153
6 1                         2                          153
7 2                         0                          153
8 2                         1                          153
9 2                         2                          153

期望输出结果

Groups:   dfMBG$datasetG.snelheid [3]
  dfMBG$datasetG.snelheid  as.character(dfMBG$~ countMB
  <chr>                     <chr>                    <dbl>
1 0                         0                          12
2 0                         1                          15
3 0                         2                          45
4 1                         0                          12
5 1                         1                          15
6 1                         2                          28
7 2                         0                          4
8 2                         1                          17
9 2                         2                          5

现有代码

MBGcount<-dfMBG %>% rowwise(.) %>%
  group_by(dfMBG$datasetG.snelheid, as.character(dfMBG$datasetG.indicatie)) %>%
 summarise(countMB = sum(as.numeric(dfMBG$datasetG.verstoringsbron)))
MBGcount

注:dfMBG$datasetG.verstoringsbron列的内容均为1。


修正方案

问题根源

  1. 在group_by和summarise中使用dfMBG$列名会直接引用整个列的完整向量,而非分组后的子集,导致每次求和都是全列总和(153)。
  2. 多余的rowwise()会干扰分组统计逻辑,无需逐行处理。

正确代码

MBGcount <- dfMBG %>%
  group_by(datasetG.snelheid, datasetG.indicatie) %>%
  summarise(countMB = n(), .groups = "drop_last")
MBGcount

代码说明

  • 移除rowwise():分组统计不需要逐行操作。
  • group_by直接用列名:在dplyr管道中,数据框已被传递,直接写列名即可引用分组后的子集。
  • summarise(countMB = n()):n()函数直接统计每个分组的行数,因为目标列全为1,统计行数和求和结果一致,写法更简洁。
  • .groups = "drop_last":保留第一个分组(datasetG.snelheid),与期望输出的分组格式匹配。

如果坚持用求和方式实现,也可以写成:

MBGcount <- dfMBG %>%
  group_by(datasetG.snelheid, datasetG.indicatie) %>%
  summarise(countMB = sum(as.numeric(datasetG.verstoringsbron)), .groups = "drop_last")
MBGcount

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:09:18