修复data.table中用lapply将yyymmdd数值型日期转为日期格式的问题
修复数值型日期转格式的data.table代码
原代码的问题
- 列名定义错误:
date_cols <- c(Date1, Date2)取的是列的实际数值,不是列名字符串,导致data.table无法定位到要处理的目标列。 - 日期转换逻辑错误:直接用
as.Date()处理数值型的yyymmdd格式,会被默认解析为自1970-01-01起的天数,完全不符合需求,必须先转为字符型并指定日期格式。
修复后的代码
# 正确指定要处理的列名(字符串形式) date_cols <- c("Date1", "Date2") # 批量转换:先把数值转字符,再按yyymmdd格式解析为日期 dt_1[, (date_cols) := lapply(.SD, function(x) as.Date(as.character(x), format = "%Y%m%d")), .SDcols = date_cols]
效果验证
执行后查看dt_1,Date1和Date2会变成标准的日期类型:
> dt_1 Date1 Amount Date2 1: 2021-01-03 10 2019-01-01 2: 2022-08-05 20 2018-02-20 3: 2019-12-31 30 2024-09-30
内容的提问来源于stack exchange,提问作者highbury
相关产品推荐
相关产品推荐

