将整数格式日期转换为日期的双倍格式

时间:2017-06-23 12:11:09

标签: r date posix

我在数据框中使用以下格式的日期格式:

Jan-85
Apr-99
1-Nov
Feb-96

当我看到typeof(df$col)时,我得到的答案为“整数”。

实际上,当我在excel中看到格式时,它是m/d/yyyy格式。我试图将此转换为R中的日期格式。我所有的努力都产生了NA。

我尝试了parse_date_time功能。我和as.date一起尝试了as.character。我试过as.POSIXct,但一切都给了我NA。

我的试验如下,一切都失败了:

as.Date.numeric(df$col,"m%d%Y")

transform(df$col, as.Date(as.character(df$col), "%m%d%Y"))

as.Date(df$col,"m%d%Y")

as.POSIXct.numeric(as.character(loan_new$issue_d), format="%Y%m%d")

as.POSIXct.date(as.character(df$col), format="%Y%m%d")

mdy(df$col)

parse_date_time(df$col,c("mdy"))

如何将此格式转换为日期格式?我使用了rubridate包用于parse_date_time和mdy包。

输入输出低于

Label <- factor(c("Apr-08", 
"Apr-09", "Apr-10", "Apr-11", "Aug-07", "Aug-08", "Aug-09", "Aug-10", 
"Aug-11", "Dec-07", "Dec-08", "Dec-09", "Dec-10", "Dec-11", "Feb-08", 
"Feb-09", "Feb-10", "Feb-11", "Jan-08", "Jan-09", "Jan-10", "Jan-11", 
"Jul-07", "Jul-08", "Jul-09", "Jul-10", "Jul-11", "Jun-07", "Jun-08", 
"Jun-09", "Jun-10", "Jun-11", "Mar-08", "Mar-09", "Mar-10", "Mar-11", 
"May-08", "May-09", "May-10", "May-11", "Nov-07", "Nov-08", "Nov-09", 
"Nov-10", "Nov-11", "Oct-07", "Oct-08", "Oct-09", "Oct-10", "Oct-11", 
"Sep-07", "Sep-08", "Sep-09", "Sep-10", "Sep-11"))

1 个答案:

答案 0 :(得分:1)

NA通常是您在错误指定格式时获得的内容。这是你做的。也就是说,如果您的数据看起来与您提供的第一个示例相似,则无法简单地将其转换为日期。您有两种不同的格式,一种是月 - 月,另一种是月 - 。

如果您更新的日期(即Dec-11)格式正确,那么您使用format这样的as.Date参数:

date <- "Dec-11"
as.Date(date, format = "%b-%d")
# [1] "2017-12-11"

或者您的示例数据:

as.Date(Label, format = "%b-%d")
# [1] "2017-04-08" "2017-04-09" "2017-04-10" "2017-04-11" "2017-08-07" "2017-08-08"
# [7] "2017-08-09" "2017-08-10" "2017-08-11" "2017-12-07" "2017-12-08" "2017-12-09"

如果您要转换Jan-85之类的内容,则必须决定该日期应该具有哪个日期。假设我们只是每个月的第一天,那么你可以这样做:

x <- "Jan-85"
xd <- paste0("1-",x)
as.Date(xd, "%d-%b-%y")
# [1] "1985-01-01"

有关格式代码的更多信息,请参阅?strptime

请注意,R会自动将今年添加为年份。它必须,否则它不能指定日期。如果您没有一个月中的某一天(例如,像Jan-85那样),则无法转换为日期,因为基础POSIX算法不具备所有必要信息。

另请注意,这仅适用于您的语言环境设置为英语时。否则,您的操作系统很有可能无法正确识别月份缩写。为此,请执行以下操作:

Sys.setlocale(category = "LC_TIME", locale = "English_United Kingdom")

如果必须,您可以稍后将其重新设置为原始版本,或者重新启动R会话以重置区域设置。

注意:请仔细检查哪些区域设置符号对您的操作系统有效。上面的示例适用于Windows,但无法保证在Linux或Mac上。

为什么会看到整数

这些字符串值是整数类型的事实是由于R在数据帧中读取时自动将字符向量转换为因子。因此,typeof()会返回integer,因为它是因素的内部表示。