如何修复tribble创建含IDate类型列时的日期格式错误?
问题解决:as.IDate转换日期格式报错
错误原因
as.IDate()默认仅能识别标准无歧义的日期格式(如YYYY-MM-DD),你的数据中:
D.LastPV是年/月/日(YYYY/MM/DD)格式D.LastCEMI是月/日/年(MM/DD/YYYY)格式
两种格式既不符合默认解析规则,又互不统一,导致解析失败,抛出character string is not in a standard unambiguous format错误。
解决方案
直接在as.IDate()中指定对应列的日期格式即可,以下是两种可行写法:
写法1:在tribble内直接指定格式
library(tibble) library(data.table) # as.IDate属于data.table包,需提前加载 tribble( ~SUBJID, ~D.LastPV, ~D.LastCEMI, 2610041, as.IDate('2022/05/23', format = "%Y/%m/%d"), as.IDate('09/05/2022', format = "%m/%d/%Y"), 2618012, as.IDate('2022/09/02', format = "%Y/%m/%d"), as.IDate('09/02/2022', format = "%m/%d/%Y"), 2641012, as.IDate('2022/07/25', format = "%Y/%m/%d"), as.IDate('08/29/2022', format = "%m/%d/%Y") )
写法2:先创建字符型数据框,再批量转换类型
这种写法更简洁,避免重复编写格式参数:
library(tibble) library(data.table) # 先创建包含字符型日期列的tibble df <- tribble( ~SUBJID, ~D.LastPV, ~D.LastCEMI, 2610041, '2022/05/23', '09/05/2022', 2618012, '2022/09/02', '09/02/2022', 2641012, '2022/07/25', '08/29/2022' ) # 分别转换两列为IDate类型 df$D.LastPV <- as.IDate(df$D.LastPV, format = "%Y/%m/%d") df$D.LastCEMI <- as.IDate(df$D.LastCEMI, format = "%m/%d/%Y")
内容的提问来源于stack exchange,提问作者D. Shin
相关产品推荐
相关产品推荐

