如何解决使用具有多种日期格式的lubridate
我有一列日期以8/7/2001
,10/21/1990
等格式存储。两个值只是四位数的年份。我使用以下代码将整个列转换为类Date
。
lubridate::parse_date_time(eventDate,orders = c('mdy','Y'))
它很好用,只是将仅仅几年的值转换为yyyy-01-01
,而我希望它们只是yyyy
。有没有一种方法可以防止lubridate
添加任何尚不存在的信息?
编辑:创建数据框的代码
id = (1:5)
eventDate = c("10/7/2001","1989",NA,"5/5/2016","9/18/2011")
df <- data.frame(id,eventDate)
解决方法
我认为无法将您的值转换为日期,并保持“ yyyy”值不变。通过将您的“ yyyy”值转换为“ yyyy-01-01”,lubridate
做的正确。由于日期是有序的,并且如果您在列中定义了天和月的其他值,则所有其他值也需要具有这些组成部分。
例如。如果我在下面产生data.frame。如果我要求R根据日期列对表进行排序,则第一行(“ 2020”)中的日期在第二行(“ 2020-02-28”)中的值之前?还是之后呢?值2020是2020年,实际上可以表示这一年中的每一天,因此R应该如何处理呢?通过添加一年的第一天,lubridate
定义了这些组成部分,并避免了R引起混淆。
dates <- c("2020","2020-02-28","2020-02-20","2020-01-10","2020-05-12")
id <- 1:5
df <- data.frame(
id,dates
)
id dates
1 1 2020
2 2 2020-02-28
3 3 2020-02-20
4 4 2020-01-10
5 5 2020-05-12
因此,如果您希望保留“ yyyy”的完整性,则很有可能它们不应停留在eventDate
列中,而其他值的结构也应不同(“ dd / mm / yyyy”) 。现在,如果确实需要完整保留这些值,我认为最好将eventDate
列的值保留为字符,并将这些值作为Dates存储在另一列中,例如:
df$as_dates <- lubridate::parse_date_time(df$eventDate,orders = c('mdy','Y'))
id eventDate as_dates
1 1 10/7/2001 2001-10-07
2 2 1989 1989-01-01
3 3 <NA> <NA>
4 4 5/5/2016 2016-05-05
5 5 9/18/2011 2011-09-18
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。