3

This is my data

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
 )

Solution needed:

I wanted to filter all rows based on time (eg: between 00:15:00 and 00:45:00)

What i tried :

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

But i didnt end up with what i expected . Please help

Betel
  • 151
  • 7

3 Answers3

3

Use hour and minute as appropriate

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

Created on 2020-11-08 by the reprex package (v0.3.0)

Hugh
  • 15,521
  • 12
  • 57
  • 100
2

Using base 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
Ronak Shah
  • 377,200
  • 20
  • 156
  • 213
2

Does this work:

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
> 
Karthik S
  • 11,348
  • 2
  • 11
  • 25