繁体   English   中英

如何在R的tidyversse中使用dplyr根据时间(hh:mm:ss)过滤行?

[英]How to filter rows based on time (hh:mm:ss) using dplyr in tidyversse in R?

这是我的数据

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) )

但我没有得到我所期望的结果。 请帮忙

适当使用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 包(v0.3.0) 于 2020 年 11 月 8 日创建

这是否有效:

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
> 

使用基础 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM