2013-04-26 26 views
0

嗨,我有一个快速的问题在R,如何改变整数日期[R

我们可以字符转换为日期,例如

v <- c(2008101, 20081202, 20081103) 
date <- as.Date(as.character(v), format("%Y%m%d"));date 

但我怎么能转换v<- c(200801, 200802)2008-012008-02

回答

2

什么样简单的东西:

##Give each entry a date 
v = paste0(v, "01") 
##Convert as before 
date = as.Date(as.character(v), format("%Y%m%d")); 

你甚至可以写一个小功能来自动执行此操作:

to_date = function(v) { 
    v = as.character(v) 

    missing_day = nchar(v) < 7 
    v[missing_day] = paste0(v[missing_day], "01") 
    as.Date(v, format("%Y%m%d")) 
} 

##Last value is missing the date 
v = c(2008101, 20081202, 20081103, 200811) 
to_date(v) 
+0

我想所需结果是'2008-01',但你的解决方案给了我'2008-01-01'。思考? – 2013-04-26 13:10:56

+0

没有想过粘贴,很好的答案,谢谢 – user2298382 2013-04-26 13:25:24

+0

@RomanLuštrik我想它涉及到OP使用日期的方式和方式。当我处于这种状况时,我通常不会关心这一天(例如绘制100年)。 – csgillespie 2013-04-26 15:09:41

0

这里的另一种选择:

foo <- function(x){ 
    x <- as.Date(as.character(x), format("%Y%m%d")) 
    newDates <- lapply(strsplit(as.character(x), "-"), "[", -2) 
    sapply(newDates, function(x) paste(x[1],x[2], sep="-")) 
} 

> foo(v) 
[1] "2008-01" "2008-02" "2008-03"