在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
相关产品推荐
相关产品推荐

