r - 如何将混合数字和日期格式转换为单数格式
问题描述
我有一个从 excel 导入的数据集中的日期列,其中包含数字日期和 dmY 日期。此列当前结构为字符。我想将其格式化为 Ymd 日期列。
所以例如
dates <- c(25678, 34758, 32474, 23443, "02/06/1999")
date_data <- data.frame(data = dates)
#hopeful end product
"1970-04-20" "1995-02-28" "1988-11-27" "1964-03-07", "1999-06-02"
所有这些日期都使用 excel 中的原点“1899-12-30”
我试过弄乱lubridate,parse_date_time
但没有这样的运气。
解决方案
这将检查日期格式并应用相应的转换。如果您遇到更多格式,您将需要更多 else ifs,每种格式都有一个。
数据:
dates <- c(25678, 34758, 32474, 23443, "02/06/1999")
dates
[1] "25678" "34758" "32474" "23443" "02/06/1999"
as.vector(sapply( dates, function(x){
if( grepl("^[0-9]+$", x) ){
strftime(as.Date( as.integer(x), origin="1899-12-30" )) }
else{ strftime(as.POSIXlt(x, format="%d/%m/%Y")) } } ))
结果:
[1] "1970-04-20" "1995-02-28" "1988-11-27" "1964-03-07" "1999-06-02"
推荐阅读
- jquery - 在悬停 jquery 上创建运行文本
- reactjs - 可观察的数组道具变化
- azure - Windows 服务器上的 Azure DSC,添加了数据磁盘
- haskell - 使用 Haskell OpenGL 应用转换
- c - 不完全理解 C 中自定义编写的“memcpy”函数
- javascript - e(...).foundation 不是带有 Webpack 的 Foundation 6.4 的函数
- python - 在 Ubuntu v15 终端上调用 Python 的 Idle
- javascript - 如何使用 JavaScript 创建这个 HTML 代码块
- javascript - 蒙版上带有圆形 div 的图表
- javascript - 防止 mouseup 事件多次触发