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

基于R语言Base包实现按x首次出现计算y求和的result向量

用Base R生成符合指定规则的result向量

给定已按x列排序的数据集:

df <- data.frame(x = c(1,2,3,4,5,6,6,8,9,10,10,11,11,11,12,13,13,14),
                 y = c(1,2,3,4,5,6,7,8,9,1,2,4,5,3,5,6,7,8),
                 result = c(1,2,3,4,5,13,0,8,9,1,0,4,0,0,5,13,0,8))

需要生成result向量,规则等价于Excel公式IF(COUNTIFS($A$2:A2,A2)>1,0,SUMIFS(B:B,A:A,A2)):

  • 若当前行的x值为首次出现,计算所有相同x值对应的y列之和
  • 否则赋值为0
  • 要求使用Base R编写,适配大型数据集,无需额外排序

方案一:结合tapply与duplicated

# 计算每个x对应的y总和
x_group_sums <- tapply(df$y, df$x, sum)
# 生成result:首次出现的x取对应总和,重复行赋值0
df$result <- ifelse(!duplicated(df$x), x_group_sums[as.character(df$x)], 0)
  • tapply是Base R中高效的分组聚合函数,适合处理大型数据集的分组求和
  • duplicated快速标记重复行,配合ifelse完成赋值逻辑

方案二:使用ave函数(更简洁)

df$result <- ave(df$y, df$x, FUN = function(group) {
  ifelse(seq_along(group) == 1, sum(group), 0)
})
  • ave按x分组处理y值,每个分组内仅第一行(因数据集已按x排序,即首次出现的行)返回分组总和,其余行返回0
  • 全程向量化操作,无循环,效率适配大型数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:32:43