R 使用datetime筛选df

R 使用datetime筛选df,r,R,我有一个数据框,我正试图过滤关于两列,一个日期和一个时间 我目前有另一个函数(get_datetime),它接受格式为“YYYYMMDD”的日期和时间为“HHMM”,并返回一个POSIXct对象 如果datetime在一定的小时数(小时差异)内,则我的筛选条件为打开,这是我当前拥有的: rows <- rows[abs(as.numeric(difftime(datetime, get_datetime(rows$file_date, rows$file_time), units='hou

我有一个数据框,我正试图过滤关于两列,一个日期和一个时间

我目前有另一个函数(get_datetime),它接受格式为“YYYYMMDD”的日期和时间为“HHMM”,并返回一个POSIXct对象

如果datetime在一定的小时数(小时差异)内,则我的筛选条件为打开,这是我当前拥有的:

rows <- rows[abs(as.numeric(difftime(datetime, get_datetime(rows$file_date, rows$file_time), units='hours'))) <= hour_diff,]

get_datetime <- function(date, time) {
  #format date and time into POSIXct object
  year <- substr(landfall_date, 1, 4)
  month <- substr(landfall_date, 5, 6)
  day <- substr(landfall_date, 7, 8)
  hour <- substr(landfall_time, 1, nchar(landfall_time) - 2)
  minute <- substr(landfall_time, nchar(landfall_time) - 1, nchar(landfall_time))
  datetime <- as.POSIXct(paste0(year, '-', month, '-', day, ' ', hour, ':', minute, ':00'))
  return(datetime)
}

rows我推荐包
stringr
anytime
来清理日期和时间

library(anytime)
library(stringr)
library(dplyr)
library(lubridate)

#pad your times that are less than 4 digits
df$file_time = str_pad(df$file_time,width=4,side = "left", pad= "0")

#convert your date and time to datetime 
df$new_dt = anytime(paste(df$file_date, df$file_time))

#create an hour flag
df$hour = hour(df$new_dt)

#filter to get your result:
df %>% filter( hour == '12')
或者,如果希望日期时间范围介于
1990-07-24 12:00:00
1990-07-26 12:00:00

df %>% filter(new_dt >= '1990-07-24 12:00:00' & new_dt <= '1990-07-26 12:00:00')

我不知道你在问什么。。。你想只筛选日期还是只筛选时间?我正在尝试同时筛选,将日期和时间转换为datetime对象以进行比较。你能执行
dput(df)吗
函数在示例数据上运行,并将png与其生成的代码交换掉?但基本上,您希望在
1990-07-24 12:00和1990-07-26 12:00之间进行过滤?是的,对于时差为12的情况。我把dput输出放在png的正下方。
    county file_date file_time              new_dt hour
1   bertie  19900724      1200 1990-07-24 12:00:00   12
2 carteret  19900726      1200 1990-07-26 12:00:00   12
df %>% filter(new_dt >= '1990-07-24 12:00:00' & new_dt <= '1990-07-26 12:00:00')
     county file_date file_time              new_dt hour
1    bertie  19900724      1200 1990-07-24 12:00:00   12
2 brunswick  19900725      1800 1990-07-25 18:00:00   18
3    camden  19900725      1800 1990-07-25 18:00:00   18
4  carteret  19900726      1200 1990-07-26 12:00:00   12