如何删除数据集顶部和底部的零行

问题描述 投票:0回答:1

考虑以下示例数据框

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 工作(主要/到目前为止)。

提前致谢:)

r filter tidyverse missing-data
1个回答
0
投票

你可以尝试

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
© www.soinside.com 2019 - 2024. All rights reserved.