我正在处理一个正在测量条目和退出的数据帧。有时,在退出标准发生之前,条目的标准会被多次满足,反之亦然。我想删除这些实例。例如,在数据中,第1行中有一个条目,第2行中有另一个条目,第2行中的条目需要出来,因为我们已经是“In”。同样,第6行和第7行需要出来,因为我们已经“出去”了,而且还没有另外一个条目。另外,值得一提的是,如果没有事先录入,就不可能有出口。在没有循环的情况下删除R数据帧中有多个运行的行
我知道我可以用for循环做到这一点,但如果可能的话,我想避免这种情况。我尝试过使用cumsum来筛选0或1的“In”+“Out”的总和,其他任何事情都必须去做。这种方法不起作用。
初始数据帧:
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")
谢谢您的帮助。
从“data.table”包中使用'rleid'? – A5C1D2H2I1M1N2O1R2T1
'temp [sequence(rle(temp $ In)$ lengths)== 1,]' – rawr
Rawr,感谢您的建议,如果您将其作为答案,我会接受它。 – mks212