我仍在学习如何在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
答案 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
软件包中的lag
和dplyr
函数的一种选择。
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