使用具有多种日期格式的 lubridate
Using lubridate with multiple date formats
我有一列日期以 8/7/2001
、10/21/1990
等格式存储。两个值只是四位数年份。我使用以下代码将整个列转换为 class 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,要根据日期列对 table 进行排序,第一行中的日期(“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
列的值保留为字符,并将这些值作为日期存储在另一列中,如下所示:
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
我有一列日期以 8/7/2001
、10/21/1990
等格式存储。两个值只是四位数年份。我使用以下代码将整个列转换为 class 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,要根据日期列对 table 进行排序,第一行中的日期(“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
列的值保留为字符,并将这些值作为日期存储在另一列中,如下所示:
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