如何在数据框列中获取日期格式?

时间:2014-07-08 09:12:13

标签: r date as.date

我有一个带有日期列的数据框,我想转换它。通过这个例子,

DF <- data.frame(name = paste("A", 1:5, sep = ""), 
                 birth = c("16131", "2014-07-04", "16257", "15982", "2014-07-04"))

as.Date(DF$birth, origin = "1970-01-01")

它给我发了一条消息错误:

Error in charToDate(x) : 
  la chaîne de caractères n'est pas dans un format standard non ambigu

在英语中,字符串采用模糊的标准格式。 提前谢谢!

3 个答案:

答案 0 :(得分:2)

问题是你的一些值需要整数到日期转换,而其他一些值则需要Date。更复杂的是,DF$birth是一个因素。您可以拆分它,将as.Date应用于整数部分和字符部分,然后将它们连接起来:

f <- function(x) {
    # Thanks to @RichardScriven for the improvement
    v1 <- as.numeric(v2 <- as.character(x))
    v1 <- as.Date(v1, origin = "1970-01-01")
    v2[!is.na(v1)] <- NA
    v2 <- as.Date(v2, origin = "1970-01-01")
    as.Date(ifelse(is.na(v1), v2, v1), origin = "1970-01-01")
}

f(DF$birth)
# [1] "2014-03-02" "2014-07-04" "2014-07-06" "2013-10-04" "2014-07-04"

答案 1 :(得分:1)

as.Date(DF$birth[1], origin = "1970-01-01")
## Błąd w charToDate(x) : 
##   łańcuch tekstowy nie jest w standardowym jednoznacznym formacie
as.Date(DF$birth[2], origin = "1970-01-01")
## [1] "2014-07-04"

出生栏的每个要素必须与此相符&#34; 1970-01-01&#34;数据模式。否则你会收到错误。

答案 2 :(得分:1)

您也可以使用:

 library(gsubfn)

 DF$birth <- as.Date(gsubfn("^[[:digit:]]+$",
 ~ format(as.Date(as.numeric(x),origin="1970-01-01"),"%Y-%m-%d"),
   as.character(DF$birth) ))
 DF$birth 
 #[1] "2014-03-02" "2014-07-04" "2014-07-06" "2013-10-04" "2014-07-04"