【发布时间】:2021-07-07 23:53:17
【问题描述】:
我有一些代码需要构建一个列,该列查看前一行并求和,直到达到某个点,该点返回 0 并重新开始。
目前这是通过 for 循环完成的,但是我想用它来处理的数据集之一是 300 万行,并且使用这种方法需要几天时间来处理。为了可用于我的目的,它需要在几秒钟内处理完毕。
有没有办法加快或替换 for 循环,以便更快地处理?
(lag()之类的不能用,因为它们使用的是预计算数据)
DD <- c("Yes", "No", "No", "Yes", "No", "No", "No", "No", "No", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "No")
dataOut <- data.frame(DD)
alarm.upper.limit <- 7.26
alarm.lower.limit <- -7.26
s <- 0.11
dataOut$weight <- if_else(dataOut$DD=="Yes", 1-s, 0-s)
dataOut$cusum[1] <- dataOut$weight[1]
for (j in 2:nrow(dataOut)) {
dataOut$cusum[j] <- if(dataOut$cusum[j-1]<alarm.lower.limit){dataOut$cusum[j]=0}
else if(dataOut$cusum[j-1]>alarm.upper.limit){dataOut$cusum[j]=0}
else{(dataOut$weight[j])+(dataOut$cusum[j-1])}
}
【问题讨论】:
标签: r performance for-loop