我想删除包含零的所有行,但仅限于if(它下面的行为零并且它上面的行也为零)或者(它是零并且它是第一个观察值,它下面的数字也是零) .
例如:
RowNumb Column2
1 0
2 0
3 0
4 1
5 0
6 1
7 1
8 0
9 0
10 0
我想删除第1,2,9和10行,因为这些是唯一等于零的行,其下方为零,并且在它们之上为零或没有(在 rowNumb
1的情况下),这样我得到以下内容:
RowNumb Column2
3 0
4 1
5 0
6 1
7 1
8 0
有没有人知道如何在不使用循环的情况下执行此操作?
3 回答
您可以使用
filter
将每个绝对值与前后绝对值相加,并将该和与0进行比较:这假定没有
NA
值 . 如果发生这些,你需要稍微修改一下:这是使用
lag
和lead
函数的dplyr
方法:1) rollapply 这使用动物园包中的
rollapply
来检查连续三个中的任何一个(并且因为partial=TRUE
每端连续两个)不是零:赠送:
1a) 此变体也有效:
2) embed 此解决方案不使用任何包 . 对于此示例,
embed
形成一个10 x 3矩阵,其行包含连续的三元组(连续两个,末尾为行的零),并从中计算逻辑矩阵并将any
应用于每一行: