【发布时间】:2018-06-17 19:25:02
【问题描述】:
我有一个带有两个布尔列 A 和 B 的 data.table。我想添加一个取决于 A 和 B 的新布尔行 C,但我在“查找”前一行和上一行时遇到了麻烦。
我想如下定义 C。如果有一行 A=1 并且在周围三行的范围内至少有一个 B=1,那么我希望 C 在 A=1 和所有其他行上 C=0 的行上变为 C=1在范围内。否则 C 应该是 C=B。
如果两个范围重叠并且都包含 B=1,则 C 应该在 A=1 和 C=0 的两行上都变为 C=1。如需更多说明:
df <- data.table(A=c(0,0,0,1,0,0,0,0,0,0,0,1,1,0,0),
B=c(0,1,0,0,0,1,0,1,1,0,0,0,0,0,1))
A B A B C
1: 0 0 # 1: 0 0 0
2: 0 1 # 2: 0 1 0
3: 0 0 # 3: 0 0 0
4: 1 0 # range of three 4: 1 0 1
5: 0 0 # 5: 0 0 0
6: 0 1 # 6: 0 1 0
7: 0 0 # 7: 0 0 0
8: 0 1 8: 0 1 1 # C = B
9: 0 1 # 9: 0 1 0
10: 0 0 ## 10: 0 0 0
11: 0 0 ## 11: 0 0 0
12: 1 0 ## overlapping range of three 12: 1 0 1
13: 1 0 ## 13: 1 0 1
14: 0 0 ## 14: 0 0 0
15: 0 1 ## 15: 0 1 0
我该怎么做,我对此一无所知。
【问题讨论】:
-
第 4 行怎么会得到
C = 1?没有“周围三行范围内至少有一个B=1”,所有B都为零。 -
至于第 2、6、9 行,
C = B也不应该等于1吗? (不仅仅是第 8 行。) -
所以感兴趣的窗口是 (row - 3 : row + 3)?
-
您的
df与显示的df不匹配 -
@Ryan 现在可以了,我已经更正了。
标签: r data.table