Re: [問題] 一個data套用不同的格式

作者: celestialgod (天)   2016-06-16 11:20:07
※ 引述《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

Links booklink

Contact Us: admin [ a t ] ucptt.com