看板 R_Language 關於我們 聯絡資訊
※ 引述《clansoda (小笨)》之銘言: : 我知道題目很難看懂,我不知道怎麼用一句話解釋這個問題 : 首先我有個dataframe,他在某一段日期前跟後的時間格式不同 : 我想用as.date加上格式來對他套用,前面的格式是月-日-年 : 後面則是日/月/年,這兩個明顯不同直接套用會有問題 : 我想直接分開賦予時間格式並直接丟回dataframe裏頭 : 假設dataframe叫做u : as.Date(u[u$date<as.Date("YYYY-MM-DD"),]$buytime,"%b-%d-%Y") : ->u[u$date<as.date("YYYY-MM-DD"),]$buytime : 這樣會出現錯誤 他不會停下來但是會有warnning : 1: In grepl("\n", lines, fixed = TRUE) : : input string 1 is invalid in this locale : 接來出現在variable裡面的都是一堆數字,看起來很像是跟SAS的儲存格式一樣 : 可能是從某月某日當作0,往後就+1,往前就-1,因此我的日期都是例如說8531 : 10793這樣的數字,我目前的做法是土法煉鋼我將dataframe分成兩個部分分別賦值後 : 拉出來成為一個object,再用C把兩個object合併然後再塞回去dataframe裡面 : 請問有其他做法可以解決我這個問題嗎? 看一下下面的例子,不知道是不是你要的 x <- seq.Date(as.Date("2000/1/1"), as.Date("2003/1/1"), by = "month") y <- c(format(head(x, 18), "%Y-%m-%d"), format(tail(x, 19), "%d/%m/%Y")) ## 前五個值 # [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01" mode(y) # [1] "character" z <- ifelse(grepl("\\d{2}/\\d{2}/\\d{4}", y), as.Date(y, "%d/%m/%Y"), as.Date(y, "%Y-%m-%d")) ## 前五個值 # [1] 10957 10988 11017 11048 11078 11109 mode(z) # [1] "numeric" z2 <- as.Date(z, "1970-01-01") ## 前五個值 # [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01" all.equal(x, z2) # TRUE -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/j3ql84c data.table #1LhW7Tvj (R_Language) http://tinyurl.com/hr77hrn dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/jtg4hau dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/jq3o2g3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.74.87 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1466047210.A.762.html ※ 編輯: celestialgod (140.109.74.87), 06/16/2016 11:21:51