我正在处理一个以进出计量为基础的数据框。有时,在满足进入条件之前,进入条件会多次满足,反之亦然。我想要删除这些情况。例如,在数据中,第1行和第2行都有进入记录,但是在已经“进入”的情况下,第2行的记录需要被删除。同样地,由于已经“离开”且没有其他进入记录,所以第6行和第7行需要被删除。另外,值得一提的是,如果没有先前的进入记录,则不可能有退出记录。
我知道可以使用for循环来实现此操作,但如果可能的话,我希望避免使用它。我尝试使用cumsum来过滤“In”+“Out”的总和为0或1的数据,而除此之外的数据则需要被移除。但是这种方法不起作用。
原始数据框:
感谢您的帮助。
我知道可以使用for循环来实现此操作,但如果可能的话,我希望避免使用它。我尝试使用cumsum来过滤“In”+“Out”的总和为0或1的数据,而除此之外的数据则需要被移除。但是这种方法不起作用。
原始数据框:
In Out
1 1 0
2 1 0
3 0 -1
4 1 0
5 0 -1
6 0 -1
7 0 -1
8 1 0
9 0 -1
10 0 -1
希望的输出结果:
In Out
1 1 0
3 0 -1
4 1 0
5 0 -1
8 1 0
9 0 -1
创建初始数据框的代码:
temp <- structure(list(In = c(1, 1, 0, 1, 0, 0, 0, 1, 0, 0), Out = c(0,
0, -1, 0, -1, -1, -1, 0, -1, -1)), .Names = c("In", "Out"), row.names = c(NA,
10L), class = "data.frame")
感谢您的帮助。
rleid
函数? - A5C1D2H2I1M1N2O1R2T1temp$In
中RLE编码后长度为1的序列,并返回对应的行。 - rawr