在r中动态删除行

在r中动态删除行,r,for-loop,R,For Loop,我需要根据日期条件从数据框中动态删除行 如果开始日期大于上次读取的开始日期,并且结束日期小于上次读取的结束日期,则我希望从数据集中删除该行 有人能想出解决办法吗?它不需要使用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 }

我需要根据日期条件从数据框中动态删除行

如果开始日期大于上次读取的开始日期,并且结束日期小于上次读取的结束日期,则我希望从数据集中删除该行

有人能想出解决办法吗?它不需要使用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
  }
}
for(2中的i:nrow(df)){
如果((df$start_date[i]>df$start_date[i-1])和(df$end_date[i]
如@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))))
库(dplyr)
df%>%
过滤器(!(开始日期>滞后(开始日期,默认值=第一个(开始日期))&
结束日期<滞后(结束日期,默认值=第一个(结束日期)))

查看
dplyr
pckage中的
lag()
函数。这将查看上一个元素,并将能够执行您想要的操作。检查这个:您也可以使用
过滤器来反转条件(
start\u datelag(end\u date)
),以保留所需的行。