Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中按特定时间段筛选_R_Dplyr - Fatal编程技术网

在R中按特定时间段筛选

在R中按特定时间段筛选,r,dplyr,R,Dplyr,我有一列完整的日期和时间,即2019-01-01 00:00:00。我如何在特定的时间范围内过滤,而不考虑日期 例如,仅显示介于07:30:00和19:30:00之间的数据 谢谢你的帮助。我对R完全是个新手,我正在努力解决这个问题 这是一个完全可复制的示例 # install.packages('dplyr') library(dplyr) basedate = as.numeric(as.POSIXct('2019-11-11 11:11:11')) # choose a date set.s

我有一列完整的日期和时间,即2019-01-01 00:00:00。我如何在特定的时间范围内过滤,而不考虑日期

例如,仅显示介于07:30:00和19:30:00之间的数据


谢谢你的帮助。我对R完全是个新手,我正在努力解决这个问题

这是一个完全可复制的示例

# install.packages('dplyr')
library(dplyr)
basedate = as.numeric(as.POSIXct('2019-11-11 11:11:11')) # choose a date
set.seed(1)  # make it the same every time when selecting random dates
dates =      # this generates 200 random dates from the base date
    data.frame(stringsAsFactors = F, date = as.POSIXct(basedate + 60*60*96*runif(200), origin = '1970-01-01')) %>% 
    arrange(date) %>%
    mutate(timeonly = format(date, format = '%H:%M:%S')) %>%
    mutate(keep = timeonly > '07:30' & timeonly < '19:30') %>%
    filter(keep)

#head(dates)
#        date timeonly keep
#1 2019-11-11 12:26:30 12:26:30 TRUE
#2 2019-11-11 12:28:18 12:28:18 TRUE
#3 2019-11-11 13:25:34 13:25:34 TRUE
#4 2019-11-11 14:35:53 14:35:53 TRUE
#5 2019-11-11 16:50:38 16:50:38 TRUE
#6 2019-11-11 17:07:04 17:07:04 TRUE
#安装程序包('dplyr'))
图书馆(dplyr)
basedate=as.numeric(as.POSIXct('2019-11-11 11:11:11'))#选择一个日期
设置种子(1)#每次选择随机日期时都保持相同
dates=#这将从基准日期生成200个随机日期
data.frame(stringsAsFactors=F,date=as.POSIXct(basedate+60*60*96*runif(200),origin='1970-01-01'))%>%
安排(日期)%>%
mutate(timeonly=format(日期,格式='%H:%M:%S'))%>%
突变(keep=timeonly>'07:30'和timeonly<'19:30')%>%
过滤(保留)
#总目(日期)
#日期时间只保留
#2019-11-11 12:26:30 12:26:30正确
#2019-11-11 12:28:18 12:28:18正确
#2019-11-11 13:25:34 13:25:34正确
#4 2019-11-11 14:35:53 14:35:53正确
#5 2019-11-11 16:50:38 16:50:38正确
#6 2019-11-11 17:07:04 17:07:04正确

我的解决方案是将时间分割成一个新的变量,并使用
hms
计算不等式

library(tidyverse)
library(hms)

df <- tibble(d = c('2010-12-13 15:30:30','2018-05-13 01:20:30', '2015-03-22 08:55:18'))

df %>%
  separate(d, into = c('date','time'), sep = ' ') %>%
  mutate(
    time = as_hms(time)
  ) %>%
  filter(time > parse_hms('07:30:30') & time < parse_hms('19:30:30'))
库(tidyverse)
图书馆(hms)
df%
分开(d,分为=c('date','time'),sep='')%>%
变异(
时间=as_hms(时间)
) %>%
过滤器(时间>解析hms('07:30:30')和时间<解析hms('19:30:30'))

欢迎使用Stack Overflow u如果您尝试编写一个解决方案,但没有成功,那么将代码添加到您的帖子中仍然很有用。查看如何在此处生成最小可复制示例>>>stackoverflow.com/help/Minimal-repeatable-Example