※ 引述《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