如何删除R数据框中条件行的下一行?

时间:2018-06-26 14:19:36

标签: r dataframe filtering

我仍在学习如何在R中不使用for循环。 我不知道如何结合条件和类似过程的迭代... 在大数据框中,我需要消除r = 0的所有行,但也需要消除此行之后的行。

例如,在Df数据框中,我需要除去第4、5、8和9行。

Df
    x r
1  12 1
2  15 1
3  36 1 
4   4 0 
5  89 1
6   6 1
7  52 1
8   3 0
9  67 1
10 85 1

3 个答案:

答案 0 :(得分:3)

计算0行的索引,然后删除那些以及每个索引加1。

ix <- which(Df$r == 0)
Df[-c(ix, ix + 1), ]

给予:

    x r
1  12 1
2  15 1
3  36 1
6   6 1
7  52 1
10 85 1

答案 1 :(得分:2)

r1 = Df$r != 0 
r2 = c(TRUE, r1[1:(length(r1) - 1)])
Df = Df[r1 & r2,]

答案 2 :(得分:2)

这里是使用filter软件包中的lagdplyr函数的一种选择。

library(dplyr)

DF2 <- DF %>% filter(!(r == 0 | lag(r, default = 1) == 0))
DF2
#    x r
# 1 12 1
# 2 15 1
# 3 36 1
# 4  6 1
# 5 52 1
# 6 85 1