You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:52:18