r - Lubridate 在 R 中将日期放在未来
问题描述
当我执行此代码时:
library(lubridate)
df$date <- format(as.Date(df$date, "%m/%d/%y") , "%Y")
一些本应在 1900 年代的日期,例如:1960,转向 2060。我不知道如何解决这个问题。我想要的日期范围是 1951 - 2014,我有大约 8000 个观察值。
解决方案
看来您有 2 位数的年份。从?strptime
没有世纪的年份 (00–99)。输入时,值 00 到 68 以 20 为前缀,69 到 99 以 19 为前缀——这是 2004 年和 2008 年 POSIX 标准指定的行为,但他们也说“预计在未来的版本中,默认世纪是从一个 2 位数的年份会改变”。
所以从 00 到 68 的所有 2 位数年份都以 20 为前缀,因此 60 转为 2060 而不是 1960。
可以有多种方法来处理这个问题。一种方法是从年份超过 2014 年的日期中减去 100 年(因为我们知道年份的范围)。
例如,
df <- data.frame(date = c('1/12/60', '1/12/78' ,'1/1/91', '1/1/54'))
df$date <- as.Date(df$date, "%m/%d/%y")
df
# date
#1 2060-01-12
#2 1978-01-12
#3 1991-01-01
#4 2054-01-01
inds <- as.numeric(format(df$date, "%Y")) > 2014
df$date[inds] <- df$date[inds] - lubridate::years(100)
df
# date
#1 1960-01-12
#2 1978-01-12
#3 1991-01-01
#4 1954-01-01
推荐阅读
- gradle - 更新到 Gradle 5.0 后烦人的弹出提示
- typo3 - 访问该 DCE 之外的 DCE 字段的内容
- solr - 如何通过文档的字段值之一来提高字段分数?
- ios - Firebase - 推送通知 - 不工作
- amazon-web-services - AWS Cloudformation:变量未在 cfn-init 命令中插值
- java - JAVA - json 解析器 - 解析未知 json 格式的键()?
- mysql - Django:将 MySQL db 转移到服务器 MySQL 后表不存在
- c# - 如何将静态扩展方法添加到 C# 中的现有类
- c# - 在elasticsearch中使用.net创建节点
- javascript - Udemy 和 Upwork 建立在哪些技术之上?(用于网站和本机应用程序(Android 和 iOS)的技术)