我有一个数据帧,例如:
X Y
1-0.1
2 0
3-0.2
4-0.4
5 0
6-0.2
我需要R来选择第一个零和第二个零之间的所有行,这样最后的表是:
2 0
3-0.2
4-0.4
5 0
它不适用于子集。有人想办法解决这个问题吗?
提前感谢!
使用which
获取Y = 0
所在的索引位置,并对数据进行子集设置。
inds <- which(df$Y == 0)
df <- df[inds[1]:inds[2], ]
df
# X Y
#2 2 0.0
#3 3 -0.2
#4 4 -0.4
#5 5 0.0
数据
df <- structure(list(X = 1:6, Y = c(-0.1, 0, -0.2, -0.4, 0, -0.2)),
class = "data.frame", row.names = c(NA, -6L))
我们可以将filter
与cumsum
一起使用
library(dplyr)
df %>%
filter(lag(cumsum(Y == 0)) < 2)
# X Y
#1 2 0.0
#2 3 -0.2
#3 4 -0.4
#4 5 0.0
数据
df <- structure(list(X = 1:6, Y = c(-0.1, 0, -0.2, -0.4, 0, -0.2)),
class = "data.frame", row.names = c(NA, -6L))