在R语言中,64之后的累加和(条件累加和)

3

我是新手R语言。不确定如何在R中执行以下功能。我能在Excel中做到这一点。但不能在R中实现。有人能帮助我吗?

我想在计数器值达到64后获得累积和,

以下是我的数据,

x
57
57
57
57
57
57
58
58
58
58
61
61
62
62
1
1
11
16
16
16
16
16
16
22
22
22
27
28

当计数达到64后,我希望得到累加总和。但我不确定如何在R中实现。

以下是我需要的输出结果:

x
57
57
57
57
57
57
58
58
58
58
61
61
62
62
65
65
76
81
81
81
81
81
81
87
87
87
92
93

有人能帮忙完成这个吗?

                                                                                          Thanks

@jeremycg 这里的数据没有达到64。但是这是一个很长的循环,通常会达到64。如果没有达到,我们是否可以编写一个逻辑,当前一个值与当前值之差为负数时? - haimen
1
你可能想要放一些代表性数据,而且在你的例子中,描述的转换如何从输入到输出并不清楚。 - Rorschach
2
@akrun,我已经修改了。谢谢。 - haimen
1
另一种版本是 indx <- cumsum(c(0,diff(df$x)<0))==1; df$x[indx] <- 64+df$x[indx] - akrun
1
@akrun 这是我在 Excel 中使用的相同逻辑。只是不知道如何将其翻译成 R。非常感谢!! - haimen
显示剩余4条评论
1个回答

2
如果你的数据在达到64后被重置并继续增长,而你想保持它的值为64,请尝试以下操作:
diffs <- c(dat$x[1], diff(dat$x)) 
diffs[diffs < 0] <- 64 + diffs[diffs < 0]
cumsum(diffs)

解释:

第一行从初始值(在本例中为57)开始,获取每个数字到下一个数字的差异。

第二行找到所有负的差异值,并将它们改为64 + 它们原来的值 - 如果是62改为2,我们需要加上4:2到达64,然后再加2。

第三行使用cumsum函数计算最终值。


这段代码第二次增加时无法正常工作。第二次增加会额外添加64。我们有没有办法改变它? - haimen
是的..第二次重置后,值应该从129开始,但这里它从198开始(又加了64)。 - haimen
是的,这就是正确的,我刚刚找到了并与你的进行了交叉检查。谢谢! - haimen
我还有一个疑问.. 如果值为0,我想要分配该列的上一个值.. 有没有一种编写逻辑的方法? - haimen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接