【发布时间】:2019-03-31 06:00:07
【问题描述】:
我的数据如下所示:
year month flag group
1: 1992 6 1 8
2: 1992 7 0 8
3: 1992 8 0 8
4: 1992 9 0 8
5: 1992 10 0 8
6: 1992 11 0 8
7: 1992 12 0 8
8: 1995 6 0 10
9: 1995 7 0 11
10: 1995 8 0 11
11: 1995 9 1 11
12: 1995 10 0 11
13: 1995 11 0 11
14: 1995 12 0 11
15: 1998 6 0 13
16: 1998 7 0 13
17: 1998 8 0 13
18: 1998 9 0 13
19: 1998 10 0 13
20: 1998 11 0 13
21: 1998 12 0 13
我需要做的是为 flag 列中第一次观察到 1 之后的所有行分配一个值 1,但是这也需要由 group 完成。
作为一个具体的例子,我想要这个:
year month flag group
1: 1992 6 1 8
2: 1992 7 1 8
3: 1992 8 1 8
4: 1992 9 1 8
5: 1992 10 1 8
6: 1992 11 1 8
7: 1992 12 1 8
8: 1995 6 0 10
9: 1995 7 0 11
10: 1995 8 0 11
11: 1995 9 1 11
12: 1995 10 1 11
13: 1995 11 1 11
14: 1995 12 1 11
15: 1998 6 0 13
16: 1998 7 0 13
17: 1998 8 0 13
18: 1998 9 0 13
19: 1998 10 0 13
20: 1998 11 0 13
21: 1998 12 0 13
请注意第 1:7 行和 11:14 行现在是 1 的情况,还请注意第 15:21 行没有变化,看看最初是如何没有 1 的。
我的大部分想法都围绕着使用which 来按组找出前 1 的索引,但我遇到了一些麻烦。
如果有人有任何基于 data.table() 的解决方案,那就太好了。
感谢您的帮助!
如果有帮助,这是我的基本数据的dput():
library(data.table)
DT = setDT(structure(list(year = c(1992, 1992, 1992, 1992, 1992, 1992, 1992,
1992, 1992, 1992, 1992, 1992, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1998, 1998, 1998, 1998, 1998,
1998, 1998, 1998, 1998, 1998, 1998, 1998), month = c(1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), flag = c(0, 0,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), group = c(8L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 10L, 10L, 10L, 10L, 10L,
10L, 11L, 11L, 11L, 11L, 11L, 11L, 13L, 13L, 13L, 13L, 13L, 13L,
13L, 13L, 13L, 13L, 13L, 13L)), row.names = c(NA, -36L),
class = c("data.table", "data.frame")))
【问题讨论】:
标签: r data.table