R语言Cyclistic项目日期转换报错及NA问题技术求助
问题原因与解决方法
你的三段代码错误原因:
- 第一段代码
df$date<-as.Date(df$started_at):as.Date()默认仅识别无歧义的标准日期格式(比如YYYY-MM-DD),你的数据是带时间的月/日/年 时:分格式,默认解析规则无法匹配,因此报错。 - 第二段代码
df$date<-as.Date(df$started_at,format = "%y%m%d"):格式字符串%y%m%d对应的是无分隔符的两位年+月+日(例如200426),但你的数据是带斜杠分隔的4/26/2020,格式完全不匹配,所以返回NA。 - 第三段代码
strptime(df$started_at,"%y-%m-%d %H: %M: %S"):格式字符串要求的是两位年-月-日 小时: 分钟: 秒(你还额外多打了空格),但你的数据是四位年、斜杠分隔、无秒数,格式不匹配导致解析失败,返回NA。
正确处理步骤:
你的日期时间格式是月/日/四位年 24小时制小时:分钟,对应格式字符串为"%m/%d/%Y %H:%M",先将字符型的started_at转为日期时间类型,再提取所需列:
# 方法1:用基础R处理 # 1. 转换为POSIXct日期时间类型(更适合数据框操作) df$started_at <- as.POSIXct(df$started_at, format = "%m/%d/%Y %H:%M") # 2. 提取各日期字段 df$date <- as.Date(df$started_at) df$day <- as.integer(format(df$started_at, "%d")) # 数值型日 df$month <- as.integer(format(df$started_at, "%m")) # 数值型月 df$year <- as.integer(format(df$started_at, "%Y")) # 数值型年 # 方法2:用lubridate包更简洁(已安装的话) library(lubridate) df$started_at <- mdy_hm(df$started_at) df$date <- date(df$started_at) df$day <- day(df$started_at) df$month <- month(df$started_at) df$year <- year(df$started_at)
内容的提问来源于stack exchange,提问作者Ogunyinka
相关产品推荐
相关产品推荐

