我在数据框中使用以下格式的日期格式:
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"))
答案 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
,因为它是因素的内部表示。