5

3年以上のデータがあります。毎年、その年の 1 月 1 日に対応する日を見つけたいと考えています。例えば:

> 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

この結果ではなく、10 進数での出力が必要です。たとえば、最初の例は次のようになり125.0833333ます。

どうもありがとう。

4

3 に答える 3

9

からの関数と一緒に表現をPOSIXct使用することもできます。POSIXltfirstofxts

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
于 2013-03-19T03:08:18.123 に答える
9

日 + 日の数値部分を出力として取得したいと考えていますか? その場合、次のようなものが機能します。

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
于 2013-03-19T02:57:26.897 に答える