【发布时间】:2017-11-23 12:06:38
【问题描述】:
我认为这很简单,但失败了,无法从任何地方找到答案。
示例数据如下所示。我从 1:x 开始运行 nro 并在随机点重新启动。我想创建 ind 变量,第一次运行为 1,第二次运行为 2...
tbl <- tibble(nro = c(rep(1:3, 1), rep(1:5, 1), rep(1:4, 1)))
最终结果应如下所示:
tibble(nro = c(rep(1:3, 1), rep(1:5, 1), rep(1:4, 1)),
ind = c(rep(1, 3), rep(2, 5), rep(3, 4)))
# A tibble: 12 x 2
nro ind
<int> <dbl>
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 4 2
8 5 2
9 1 3
10 2 3
11 3 3
12 4 3
我以为我可以用 ifelse 做点什么,但惨遭失败。
tbl %>%
mutate(ind = ifelse(nro < lag(nro), 1 + lag(ind), 1))
我认为这需要某种循环。
【问题讨论】:
-
你的 1:x 不会从 1:4 运行然后重新启动并从 1:5 运行吗?
-
没错,会修改
-
cumsum(tbl$nro == 1) -
我不知道如何或为什么,但似乎工作。仍将使用真实数据进行测试,请提供答案并给您一些分数。