【发布时间】:2021-04-13 12:49:24
【问题描述】:
我正在努力学习 R,这是我在这个论坛上的第一篇文章。
我目前有一个包含填充向量“x”和未填充向量“计数器”的数据框,如下所示:
x <- c(NA,1,0,0,0,0,1,1,1,1,0,1)
df <- data.frame("x" = x, "counter" = 0)
x counter
1 NA 0
2 1 0
3 0 0
4 0 0
5 0 0
6 0 0
7 1 0
8 1 0
9 1 0
10 1 0
11 0 0
12 1 0
我在尝试编写代码时遇到了令人惊讶的困难,该代码将简单地填充计数器,以便计数器对 x 中累积的连续 1 求和,但在 x 为零时恢复为零。因此,我想按照上面的例子计算如下:
x counter
1 NA NA
2 1 1
3 0 0
4 0 0
5 0 0
6 0 0
7 1 1
8 1 2
9 1 3
10 1 4
11 0 0
12 1 1
我尝试过使用 lag() 和 ifelse(),无论是否使用 for 循环,但似乎离可行的解决方案越来越远(虽然 lag 让我很接近,但数字并未按预期计算。 ...我的 ifelse 和 for 循环最终以长度为 1 的 NA_real_、NA 或 1 向量结束。我也考虑过 cumsum - 但不确定如何将范围限定为 1 - 并且搜索和查看了类似的帖子,例如 How to add value to previous row if condition is met;但是,我仍然无法弄清楚我期望的一项非常简单的任务。
诚然,我处于早期 R 学习曲线的低谷,非常感谢社区中任何人可以提供的任何帮助和建设性反馈。谢谢。
【问题讨论】:
标签: r for-loop if-statement lag cumsum