首页 > 解决方案 > 在 r 中动态删除行

问题描述

我需要根据日期标准从数据框中动态删除行。

如果开始日期大于读取的最后开始日期,并且结束日期小于读取的最后结束日期,我想从数据集中删除该行。

有人可以提出解决方案吗?它不需要带有 for 循环。

for (i in 2:nrow(df)) {
  if ((df$start_date[i] > df$start_date[i-1]) & (df$end_date[i] < df$end_date[i-1])){
    REMOVE ROW [i] from dataframe
  }
}

标签: rfor-loop

解决方案


正如@morgan121 所述,您可以使用lag从上一行获取值。filter但是,您可以使用它,filter保留满足条件的行,因此您可以尝试:

library(dplyr)

df %>%
  filter(!(start_date > lag(start_date, default = first(start_date)) & 
         end_date < lag(end_date, default = first(end_date))))

推荐阅读