2013-03-19 65 views
4

我有超过3年的数据。对于每一年我想找到与当年Jaunary 1相对应的日子。例如:转换为R的年份中的日期和时间

> x <- c('5/5/2007','12/31/2007','1/2/2008') 
> #Convert to day of year (julian date) – 
> strptime(x,"%m/%d/%Y")$yday+1 
[1] 125 365 2 

我想知道如何做同样的事情,但随着时间的增加。但我仍然得到一天不是时间。任何人都可以建议什么是更好的方式来找到日期和时间的朱利安日期?

> x1 <- c('5/5/2007 02:00','12/31/2007 05:58','1/2/2008 16:25') 
> #Convert to day of year (julian date) – 
> strptime(x1,"%m/%d/%Y %H:%M")$yday+1 
[1] 125 365 2 

而不是这个结果,我希望在十进制日的输出。例如,第一个示例将是125.0833333等。

非常感谢。

+0

你要什么你的输出是什么样子? – alexwhan 2013-03-19 02:56:28

+0

我想在十进制的日子里输出。例如,第一个例子是125.0833333等等。 – 2013-03-19 02:57:58

回答

8

你是否希望获得一天的数字部分作为输出?如果是这样,像这样将工作:

test <- strptime(x1,"%m/%d/%Y %H:%M") 

(test$yday+1) + (test$hour/24) + (test$min/(24*60)) 
#[1] 125.083333 365.248611 2.684028 

虽然这符合你要求什么,我想去掉+1可能会更有意义:

(test$yday) + (test$hour/24) + (test$min/(24*60)) 
#[1] 124.083333 364.248611 1.684028 

虽然我的蜘蛛感官刺痛的是德克将要出现并告诉我如何用POSIXct日期/时间表示来做到这一点。

下面是使用基本功能的这样一个答案的尝试:

mapply(julian, as.POSIXct(test), paste(format(test,"%Y"),"01","01",sep="-")) 
#[1] 124.083333 364.248611 1.684028 
+0

你的蜘蛛侠感觉今天起火 – alexwhan 2013-03-19 02:59:52

+0

@ thelatemail:你的感官是现货。是的,我认为如你所说去掉'+ 1'更有意义。非常感谢你的回答。 – 2013-03-19 03:01:45

8

您还可以使用与firstof函数一起POSIXctPOSIXlt表示从xts

x1 <- c("5/5/2007 02:00", "12/31/2007 05:58", "1/2/2008 16:25") 
x1 
## [1] "5/5/2007 02:00" "12/31/2007 05:58" "1/2/2008 16:25" 


y <- as.POSIXlt(x1, format = "%m/%d/%Y %H:%M") 

result <- mapply(julian, x = as.POSIXct(y), origin = firstof(y$year + 1900)) 

result 
## [1] 124.083333 364.248611 1.684028 

,如果你不希望使用XTS话,或许是这样的

result <- mapply(julian, 
       x = as.POSIXct(x1, format = "%m/%d/%Y %H:%M", tz = "GMT"), 
       origin = as.Date(paste0(gsub(".*([0-9]{4}).*", "\\1", x1), 
             "-01-01"), 
            tz = "GMT")) 

result 
## [1] 124.083333 364.248611 1.684028 
+0

非常感谢你的回答。 – 2013-03-19 03:21:48

+0

@geektrader - 是否有任何gsub/as.date的东西的原因? - 我刚刚给我的答案添加了一个更简单的版本,但很好奇,如果我失去了一些东西。 – thelatemail 2013-03-19 03:24:06

+0

@thelatemail nope ..只是没有想到它 – 2013-03-19 03:29:44

相关问题