0

我有一个带有日期列的数据框,我想对其进行转换。有了这个例子,

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

在英语中,字符串是模棱两可的标准格式。提前致谢!

4

3 回答 3

2

问题是您的某些值需要整数到日期转换,而其他一些值需要字符到日期。更复杂的是,你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"
于 2014-07-08T09:25:31.077 回答
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"
于 2014-07-08T11:13:43.540 回答
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"

出生列的每个元素都必须匹配这个“1970-01-01”数据模式。否则你会得到错误。

于 2014-07-08T09:17:08.197 回答