首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将整数格式日期转换为日期的双重格式

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

Stack Overflow用户
提问于 2017-06-23 12:11:09
回答 1查看 1.4K关注 0票数 1

我在数据框架中有以下格式的日期格式:

代码语言:javascript
复制
Jan-85
Apr-99
1-Nov
Feb-96

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

实际上,当我看到excel中的格式时,它是m/d/yyyy格式的。我试图把这个格式转换成R。我所有的努力都产生了NA。

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

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

代码语言:javascript
复制
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"))

如何将此格式转换为日期格式?我用过润滑油包装parse_date_time和mdy包装。

dput输出低于

代码语言:javascript
复制
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"))
EN

回答 1

Stack Overflow用户

发布于 2017-06-23 12:33:00

当您错误指定格式时,通常会得到NA。你就是这么做的。也就是说,如果您的数据看起来确实像您给出的第一个示例,那么就不可能简单地将其转换为日期。你有两种不同的格式,一种是月-年,另一种是日-月.

如果更新的日期(即Dec-11)是正确的格式,则使用as.Dateformat参数如下:

代码语言:javascript
复制
date <- "Dec-11"
as.Date(date, format = "%b-%d")
# [1] "2017-12-11"

或者在您的示例数据上:

代码语言:javascript
复制
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的内容,您必须决定该日期的月份的哪一天。假设我们每个月的第一个月,然后你可以做:

代码语言:javascript
复制
x <- "Jan-85"
xd <- paste0("1-",x)
as.Date(xd, "%d-%b-%y")
# [1] "1985-01-01"

有关格式代码的更多信息可以在?strptime上找到。

请注意,R将自动将今年添加为年份。它必须这样做,否则它不能指定日期。如果您没有一个月中的一天(如1月-85),转换到日期是不可能的,因为底层的POSIX算法没有所有必要的信息。

还请记住,只有当您的地区设置为英语时,这才有效。否则,您的操作系统很有可能无法正确识别月份缩写。这样做,如:

代码语言:javascript
复制
Sys.setlocale(category = "LC_TIME", locale = "English_United Kingdom")

如果必须的话,以后可以将其设置为原来的设置,或者重新启动R会话以重置区域设置。

注意::请仔细检查哪些地区标记对您的操作系统有效。上面的示例在Windows上工作,但在Linux或Mac上都没有保证。

为什么你看到整数

这些字符串值是整数类型,这是因为R在读取数据帧时自动将字符向量转换为因子。所以typeof()返回integer,因为这是一个因子的内部表示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44721152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档