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

在R语言中对大于0的值计算累积和的实现方法

解决R语言中对大于0的值计算不中断的累积和问题

你的核心需求是:仅对air.temp中大于0的值进行累积求和,遇到小于等于0的值时保持当前累积结果不中断。之前的代码错误在于,你直接对整个air.temp的累积和做条件替换,导致不符合条件的位置被重置为0,而非保留之前的累积值。

基础R实现方案

先将所有小于等于0的air.temp值替换为0,再对处理后的向量做累积求和——0不会改变累积结果,刚好满足需求:

# 原始数据框
df <- data.frame(
  year = c('2007-04-01','2007-04-02','2007-04-03','2007-04-04','2007-04-05','2007-04-06'),
  air.temp = c(1,2,-1,3,1,0)
)

# 添加累积和列
df$temp.sum <- cumsum(ifelse(df$air.temp > 0, df$air.temp, 0))

执行后得到的结果与你期望完全一致:

> df
        year air.temp temp.sum
1 2007-04-01        1        1
2 2007-04-02        2        3
3 2007-04-03       -1        3
4 2007-04-04        3        6
5 2007-04-05        1        7
6 2007-04-06        0        7

tidyverse(dplyr)实现方案

如果你习惯使用tidyverse语法,同样可以高效实现:

library(dplyr)

df <- df %>% 
  mutate(temp.sum = cumsum(if_else(air.temp > 0, air.temp, 0)))

方案优势

这两种方法都是向量化操作,没有使用循环,处理10万+条记录的速度非常快,完全满足性能需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:09:57