【问题标题】:How to filter multiple date ranges如何过滤多个日期范围
【发布时间】:2020-02-26 01:08:40
【问题描述】:

我有一个包含很多日期的数据集。我想删除所有可用年份(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

【问题讨论】:

    标签: r apache-spark datetime dplyr


    【解决方案1】:

    您当前的意思是“日期是 2015 年 1 月同时是 2016 年 1 月……等等”。这显然不是真的,因为这些日期范围不重叠。你需要使用“or”而不是“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?)列实际上引用了一个日期,并且与字符串相比,它具有正确的类型。

    注意运算符优先级:这是因为&amp; 的优先级高于|,但很多人发现它更易读,更明确的做法是在内部… &amp; … 表达式周围加上括号。

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 2014-12-30
      • 1970-01-01
      相关资源
      最近更新 更多