R 使用datetime筛选df
我有一个数据框,我正试图过滤关于两列,一个日期和一个时间 我目前有另一个函数(get_datetime),它接受格式为“YYYYMMDD”的日期和时间为“HHMM”,并返回一个POSIXct对象 如果datetime在一定的小时数(小时差异)内,则我的筛选条件为打开,这是我当前拥有的: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
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