【问题标题】:How to delete the following row of a conditional row in a R dataframe?如何删除 R 数据框中条件行的以下行?
【发布时间】:2018-07-13 06:44:07
【问题描述】:
我仍在学习如何不在 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
【问题讨论】:
标签:
r
dataframe
filtering
【解决方案1】:
计算 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
【解决方案2】:
这是使用dplyr 包中的filter 和lag 函数的一种选择。
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
【解决方案3】:
r1 = Df$r != 0
r2 = c(TRUE, r1[1:(length(r1) - 1)])
Df = Df[r1 & r2,]