如何过滤多个日期范围

时间:2019-10-30 16:59:23

标签: r apache-spark datetime dplyr

我有一个包含很多日期的数据集。我想删除所有可用年份(2015、2016、2017和2018)从1月1日到2月2日的时间间隔中不存在的所有日期

  new_data <- my_data %>%
      filter(data > "2015-01-01" & data <"2015-02-02" & 
               data > "2016-01-01" & data <"2016-02-02" &
               data > "2017-01-01" & data <"2017-02-02" &
               data > "2018-01-01" & data <"2018-02-02") 

我尝试了此命令,但没有得到想要的结果:

   sdf_nrow(new_data)
    0 

我正在使用spark,这就是为什么我必须使用dplyr

1 个答案:

答案 0 :(得分:1)

您当前说的是“日期是2015年1月,同时是 2016年1月……等等”。显然,这永远都是不正确的,因为这些日期范围不会重叠。您需要使用“或”而不是“ and”:

new_data <- my_data %>%
    filter(
        data > "2015-01-01" & data < "2015-02-02" |
        data > "2016-01-01" & data < "2016-02-02" |
        data > "2017-01-01" & data < "2017-02-02" |
        data > "2018-01-01" & data < "2018-02-02"
    )

此外,请确保您的data(而不是date?)列实际上引用了 date ,并且具有适当的类型,与字符串。

当心具有运算符优先级:之所以起作用,是因为&的优先级比|高,但是许多人发现它更易于理解,并且在内部… & …表达式中加上括号。