代码之家  ›  专栏  ›  技术社区  ›  Marianne

R lubridate guess\u格式复制向量

  •  2
  • Marianne  · 技术社区  · 6 年前

    你好,亲爱的有帮助、知识渊博的R大师和Stackoverflowers,

    我正在尝试使用lubridate的guess\u格式,在一系列数据集上一致地格式化日期。但是,这会连接列的两个实例。下面是一个简单的示例:

    library(lubridate)
    x <- c("2014-01-18 00:00:00","2015-03-01 00:00:00","2014-05-05 00:00:00")
    y <- as.Date(x, format = guess_formats(x, "Ymd HMS"))
    

    结果:

    > x
    [1] "2014-01-18 00:00:00" "2015-03-01 00:00:00" "2014-05-05 00:00:00"
    > y
    [1] "2014-01-18" "2015-03-01" "2014-05-05" "2014-01-18" "2015-03-01"
    [6] "2014-05-05"
    

    任何指针都会很好!

    1 回复  |  直到 6 年前
        1
  •  1
  •   phiver    6 年前

    问题在于 guess_formats

    如果你跑步 guess_formats(x, "Ymd HMS") 返回的不是3种格式,而是6种格式。

                 YOmdHMS              YOmdHMS              YOmdHMS               YmdHMS               YmdHMS               YmdHMS 
    "%Y-%Om-%d %H:%M:%S" "%Y-%Om-%d %H:%M:%S" "%Y-%Om-%d %H:%M:%S"  "%Y-%m-%d %H:%M:%S"  "%Y-%m-%d %H:%M:%S"  "%Y-%m-%d %H:%M:%S" 
    

    现在将6种格式传递给as。处理这些数据并回收x以匹配的日期。如果您只是将这6种格式粘贴为。可以看到y向量结果的日期。

    as.Date(x, format = c("%Y-%Om-%d %H:%M:%S", "%Y-%Om-%d %H:%M:%S", "%Y-%Om-%d %H:%M:%S" , "%Y-%m-%d %H:%M:%S",  "%Y-%m-%d %H:%M:%S",  "%Y-%m-%d %H:%M:%S") 
    
    [1] "2014-01-18" "2015-03-01" "2014-05-05" "2015-05-05" "2014-01-18" "2015-03-01"
    

    显而易见的解决方案是 y <- ymd_hms(x) 由于您正在尝试猜测这种格式,ymd\U hms已经尝试解析这种格式的许多不同版本。