【发布时间】:2013-03-06 04:51:36
【问题描述】:
我觉得这是一个相当简单的问题,但在我的一生中,我似乎找不到答案。我有一个相当标准的数据框,我想做的是对一列值求和,直到它们达到某个值(该值或大于该值),此时它将 1 放入一个新列(标记为keep) 并在 0 处重新开始求和。
我有一列分钟,分钟之间的差异,一个保留列和一个累积总和列(我使用的示例比实际的完整数据集干净得多)
minutes difference keep difference_sum
1052991158 0 0 0
1052991338 180 0 180
1052991518 180 0 360
1052991698 180 0 540
1052991878 180 0 720
1052992058 180 0 900
1052992238 180 0 1080
1052992418 180 0 1260
1052992598 180 0 1440
1052992778 180 0 1620
1052992958 180 0 1800
差和列是用代码计算出来的
caribou.sub$difference_sum<-cumsum(difference)
我想要做的是运行上面的代码,条件是,当总和值达到 1470 或任何大于它的数字时,它会在保持列中放置一个 1,然后重新开始求和,并继续运行数据集。
提前致谢,如果您需要更多信息,请告诉我。
艾登
【问题讨论】:
-
当达到 1470 时,
difference_sum是否重置为 0?一个稍长的示例集(包括difference_sum何时超过阈值)会有所帮助。 -
不,这就是我想要做的,差异总和列当前是使用 caribou.sub$difference_sum
-
好的,但是当你越过阈值后,你如何计算下一个阈值?你是用1470以上的盈余,还是从下一行从0开始?
-
哦,明白了。下一行将在每个点重置为 0(至少,这就是我想要它做的,会有盈余但必须被扔掉)。 Henrik 在下面找到了它。感谢您帮助解决问题。
-
但我想我会按照你的要求扩展它,以防其他人在这里偶然发现。
标签: r loops if-statement cumsum