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

在R中按colA分组聚合colC(过滤colB为NA的行)并计算求和结果频次的实现方案

在R中按colA分组聚合colC(过滤colB为NA的行)并计算求和结果频次的实现方案

嘿,咱们一步步来搞定你的需求哈~首先得先把colB为NA的行过滤掉,接着按colA分组对colC求和,最后统计这些求和结果的出现频率。下面给你两种常用的实现方式,按需选择就行:

方法一:用基础R实现

不需要额外安装包,直接用原生函数就能完成:

  1. 先过滤掉colB含NA的行:
filtered_dat <- dat[!is.na(dat$colB), ]
  1. 按colA分组对colC求和:
sum_by_colA <- tapply(filtered_dat$colC, filtered_dat$colA, sum)

这时候你会得到一个命名向量,比如你的示例数据里,结果会是factor1: 3, factor2: 11。
3. 计算求和结果的频次:

# 直接生成频次表
sum_frequency <- table(sum_by_colA)
# 转成数据框格式更直观
sum_frequency_df <- as.data.frame(sum_frequency)

打印sum_frequency_df就能看到清晰的频次统计啦。

方法二:用tidyverse包(dplyr)实现

如果习惯用管道式操作,tidyverse会更简洁,先确保你装了dplyr包:

# 没装的话先安装
# install.packages("dplyr")
library(dplyr)

然后一步到位完成所有操作:

result <- dat %>%
  # 过滤掉colB为NA的行
  filter(!is.na(colB)) %>%
  # 按colA分组
  group_by(colA) %>%
  # 计算每组colC的和
  summarise(sum_colC = sum(colC)) %>%
  # 取消分组(避免后续操作受分组影响)
  ungroup() %>%
  # 统计每个求和结果的出现频次
  count(sum_colC, name = "frequency")

运行后result就是你要的频次统计数据框,示例数据里会得到两行:sum_colC为3时频次1,sum_colC为11时频次1。

备注:内容来源于stack exchange,提问作者Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:04:29