Reputation: 161
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
Upvotes: 3
Views: 745
Reputation: 11584
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
>
Upvotes: 2
Reputation: 16090
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)
Upvotes: 3
Reputation: 388817
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
Upvotes: 2