【问题标题】:How to filter rows based on time (hh:mm:ss) using dplyr in tidyversse in R?如何在 R 的 tidyverse 中使用 dplyr 根据时间(hh:mm:ss)过滤行?
【发布时间】:2021-02-20 13:47:41
【问题描述】:

这是我的数据

library(tidyverse)
a<-tribble(
   ~"Date", ~"Time", ~"Name", ~"Value",
   "2020-06-03",   "00:15:00",   "DR.RADHAKRISHNAN SALAI",   0.166,
   "2020-06-03",   "00:30:00", "DR.RADHAKRISHNAN SALAI",   0.867,
   "2020-06-03",   "00:45:00", "DR.RADHAKRISHNAN SALAI",   0.906,
   "2020-06-03",   "01:00:00", "DR.RADHAKRISHNAN SALAI",   0.677,
   "2020-06-03",   "01:15:00", "DR.RADHAKRISHNAN SALAI",   0.077
 )

需要的解决方案:

我想根据时间过滤所有行(例如:00:15:00 到 00:45:00 之间)

我尝试了什么:

a%>%
filter(Time => hms::as.hms(00:15:00) | Time <= hms::as.hms(00:45:00) )

但我并没有达到我的预期。请帮忙

【问题讨论】:

    标签: r dplyr time-series tidyverse ggtimeseries


    【解决方案1】:

    酌情使用hourminute

    library(lubridate)
    library(tidyverse)
    
      
      a<-tribble(
        ~"Date", ~"Time", ~"Name", ~"Value",
        "2020-06-03",   "00:15:00",   "DR.RADHAKRISHNAN SALAI",   0.166,
        "2020-06-03",   "00:30:00", "DR.RADHAKRISHNAN SALAI",   0.867,
        "2020-06-03",   "00:45:00", "DR.RADHAKRISHNAN SALAI",   0.906,
        "2020-06-03",   "01:00:00", "DR.RADHAKRISHNAN SALAI",   0.677,
        "2020-06-03",   "01:15:00", "DR.RADHAKRISHNAN SALAI",   0.077
      )
      
      a %>%
        filter(hour(hms::as_hms(Time)) == 0,
               between(minute(hms::as_hms(Time)), 15, 45))
    #> # A tibble: 3 x 4
    #>   Date       Time     Name                   Value
    #>   <chr>      <chr>    <chr>                  <dbl>
    #> 1 2020-06-03 00:15:00 DR.RADHAKRISHNAN SALAI 0.166
    #> 2 2020-06-03 00:30:00 DR.RADHAKRISHNAN SALAI 0.867
    #> 3 2020-06-03 00:45:00 DR.RADHAKRISHNAN SALAI 0.906
    

    reprex package (v0.3.0) 于 2020 年 11 月 8 日创建

    【讨论】:

      【解决方案2】:

      这行得通吗:

      library(dplyr)
      a %>% mutate(min = as.numeric(substr(Time, 1,2)) * 60 + as.numeric(substr(Time, 4,5))) %>% 
      filter(between(min,15,45)) %>% select(-min)
      # A tibble: 3 x 4
        Date       Time     Name                   Value
        <chr>      <chr>    <chr>                  <dbl>
      1 2020-06-03 00:15:00 DR.RADHAKRISHNAN SALAI 0.166
      2 2020-06-03 00:30:00 DR.RADHAKRISHNAN SALAI 0.867
      3 2020-06-03 00:45:00 DR.RADHAKRISHNAN SALAI 0.906
      > 
      

      【讨论】:

        【解决方案3】:

        使用基础 R:

        subset(a, as.POSIXct(Time, format = "%T") >= as.POSIXct('00:15:00', format =  '%T') & 
                  as.POSIXct(Time, format = "%T") <= as.POSIXct('00:45:00', format =  '%T'))
        
        #   Date       Time     Name                   Value
        #  <chr>      <chr>    <chr>                  <dbl>
        #1 2020-06-03 00:15:00 DR.RADHAKRISHNAN SALAI 0.166
        #2 2020-06-03 00:30:00 DR.RADHAKRISHNAN SALAI 0.867
        #3 2020-06-03 00:45:00 DR.RADHAKRISHNAN SALAI 0.906
        

        【讨论】:

          猜你喜欢
          • 2020-05-24
          • 2022-10-05
          • 1970-01-01
          • 2021-11-11
          • 2023-03-13
          • 2018-07-10
          • 2017-05-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多