1

私は現在、1列に時間を含むデータフレームに保存されたデータを扱っています。一日をいくつかの期間に分割する必要があります。これまではフルタイムでやっていた

workingdata <- read.csv(filename)
workingdata$dateI <- as.POSIXlt(workingdata$dateI,format="%Y-%m-%d %H:%M:%S")
workingdata$hourI <- workingdata$dateI$hour
workingdata$shift <- cut(workingdata$hourI, breaks=c(0,6,13,23),
                         labels=c("morning","midday","evening"),
                         include.lowest=TRUE,right=TRUE)

morningこれは問題なく機能し、0:00 から 6:59 までmidday、7:00 から 13:59 まで、およびevening14:00 から 23:59 までの3 つのレベルの係数を作成しました。

今、私は同様のことをしたいと思いますが、分/秒に基づいたカットを使用midday11:34:12ます。純粋にPOSIXltに基づいたカットでそれを行う方法はありますか? 最善のアプローチは何ですか?

編集:カットを POSIXlt オブジェクトとして指定しようとしましたが、常に日付が含まれているように見えるので、それは私が望むものではありません...

> brk<-as.POSIXlt("11:34:12",format="%H:%M:%S")
> brk
[1] "2012-11-16 11:34:12"
4

1 に答える 1

0

データとデータの開始日との差を計算し、それらをカットオフ ポイントと比較できます。

foo <- as.POSIXlt(runif(100,min=0,max=1000009),origin="2012-01-01")
bar <- rep(NA,length(foo))
morning <- 
    foo-as.POSIXlt(paste(1900+foo$year,"-",1+foo$mon,"-",foo$mday,sep=""))<
    11*60+34+12/60
bar[morning] <- "morning"

正午と夕方のシフトとbar要因への転換は、読者の演習として残されています;-)

于 2012-11-16T20:47:54.283 に答える