考虑以下示例数据框
df=data.frame(x=c(0,3,5,0,7,6,0),y=c(0,0,3,0,0,4,0),z=c(8,7,6,8,9,4,3))
我想删除第一行和最后一行,其中 y=0,即第 1,2 行和第 7 行 - 而不删除第 4 行和第 5 行。
我可以使用
filter(!y==0)
过滤掉任何带零的行,并且可以看到建议根据位置 (n=) 删除的 slice_head()
和 slice_tail()
。我正在寻找一种根据 y 有条件地删除头部和尾部的方法。
完整数据集由 200,000 行组成,其中包含跨日期和 ID 收集的数据。我将使用 group_by(id,date) 每天和 id 应用这个。带零的头部和尾部的长度因日期而异,因此我无法使用
slice_head(n=2)
。
我在 tidyverse 工作(主要/到目前为止)。
提前致谢:)
你可以尝试
cumsum
+ rev
> subset(df, cumsum(y > 0) > 0 & rev(cumsum(rev(y > 0)) > 0))
x y z
3 5 3 6
4 0 0 8
5 7 0 9
6 6 4 4