我有一个带有日期列的数据框,我想转换它。通过这个例子,
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
在英语中,字符串采用模糊的标准格式。 提前谢谢!
答案 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"