虽然删除行有很多问题,但我找不到解决问题的方法。
这是一个data.frame作为例子:
df <- data.frame(A = c(1,2,3,4,5,6),
D1 = as.Date(as.character(c("1863-12-01","1945-06-06","1955-03-01","1962-08-01","1980-08-01","1998-12-01")), format = "%Y-%m-%d"),
D2 = as.Date(as.character(c("1923-02-28","1953-05-28","1962-07-31","1978-06-30","1998-11-30","2015-12-31")), format = "%Y-%m-%d"))
结果应该没有D1行和D2的上一行之间超过一天的行,请参阅:
A D1 D2
5 1980-08-01 1998-11-30
6 1998-12-01 2015-12-31
我通过循环尝试了它,但它不能以所需的方式工作 - 我必须一次又一次地重复循环以获得最终结果:
for (i in 1:length(df))
{
if ((df$D1[i + 1] - df$D2[i]) > 1)
df <- df[-c(i), ]
}
错误在哪里,是否有比循环更好的方法?谢谢!
答案 0 :(得分:2)
使用dplyr
你可以做
library(dplyr)
filter(df, D1 - lag(D2) < 2)
修改强> 如果您想保持D2满填充条件的行使用以下内容:
filter(df, lead(D1) - D2 < 2 | D1 - lag(D2) < 2)