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