从DataFrame筛选日期时出错:字符格式日期转换失败
解决字符型日期列筛选当日数据的报错问题
你的代码里有几个关键问题导致了报错:
- R是大小写敏感的,
as.date()是错误的函数名,正确写法是as.Date() - 你的日期字符串格式是
月/日/年 时分,直接用as.Date()解析时,R无法自动识别这种非标准格式,必须指定格式参数 - 第二个筛选语句的括号位置错误,把条件判断放到了
as.character()内部,属于语法逻辑错误 - 直接用字符型日期字符串和
lubridate::today()(日期类型)比较,类型不匹配,不可能匹配成功
下面是两种可行的解决方法:
方法1:使用lubridate包(推荐)
lubridate专门处理日期时间,mdy_hm()可以直接识别月/日/年 时:分的格式,再用date()提取日期部分和today()比较:
library(dplyr) library(lubridate) dd <- data.frame(c1 =c("1/16/2023 1:26", "1/16/2023 1:26", "1/16/2023 1:40", "1/16/2023 2:05", "1/16/2023 2:05", "1/16/2023 2:10")) # 筛选当日数据 dd %>% filter(date(mdy_hm(c1)) == today())
方法2:使用base R
用as.POSIXct()指定格式解析日期时间,再转成日期类型进行比较:
library(dplyr) dd <- data.frame(c1 =c("1/16/2023 1:26", "1/16/2023 1:26", "1/16/2023 1:40", "1/16/2023 2:05", "1/16/2023 2:05", "1/16/2023 2:10")) dd %>% filter(as.Date(as.POSIXct(c1, format = "%m/%d/%Y %H:%M")) == Sys.Date())
注:Sys.Date()和lubridate::today()功能一致,可任选其一
内容的提问来源于stack exchange,提问作者potro
相关产品推荐
相关产品推荐

