2014-07-08 47 views
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 

在英語中,字符串是一個模糊的標準格式。 在此先感謝!

+0

你構建你的data.frame錯誤。 'birth'中的值不僅是日期,而且是整數(例如16131)。 –

+0

做as.Date(16131,origin =「1970-01-01」)它會返回一個日期! –

回答

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" 
+1

你可以通過做'v1 < - as.numeric(v2 < - as.character(DF $ birth))'來避免重複。 –

+0

感謝您的建議,將更新答案:) – konvas

+0

非常感謝您理查德和​​Konvas! 祝你有美好的一天:) –

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」數據模式相匹配。否則,你會得到錯誤。

+0

好的,我明白了,謝謝! –

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" 
+0

謝謝akrun,它很好用! –

相關問題