2013-03-19 66 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

相關問題