解析R中的非常规日期

时间:2017-01-23 07:23:25

标签: r date datetime

我希望你们有个美好的夜晚。

我有一个看起来像这样的数据集:

data1
       [date]    [fuel_price] 
[1,]  201004         3.56           
[2,]  201105         3.32          
[3,]  201106         3.45           
[4,]  201212        3.94        
[4,]  201301         3.94    

日期的格式为:YYYYMM,我试图让R解释它。 到目前为止,这是我的代码:

DateNum = as.numeric(as.POSIXct(data1$date, format="%Y%m"))

PriceFun = approxfun(thedata1$fuel_price ~ DateNum)

PriceFromDate = function(x) {
  round(PriceFun(x), 3) }

为什么它不适合我?

先谢谢你们。

1 个答案:

答案 0 :(得分:1)

这是一种风险较大的方法,但您可以考虑使用anytime包:

  x <- c(201004,           
         201105,          
         201106,           
         2012012,        
         201301)  

  anytime::anytime(x, asUTC = TRUE)

这会给你:

[1] "2010-04-01 01:00:00 BST" "2011-05-01 01:00:00 BST" "2011-06-01 01:00:00 BST"
[4] "2012-12-01 00:00:00 GMT" "2013-01-01 00:00:00 GMT"

评论中讨论的要点是有效的,您可能首先希望得到明确的字符串,对日期格式做出有意识的假设;比如假设每个日期的一个月的第一天和承担您的转换;提供的解决方案使用您的初始字符串2012012 与拼写错误来证明任何时候都可以管理此字符串。