2017-12-29 11 views
0

から、私はいくつかの列(タイムスタンプ、OBJECT_ID、ステータスといくつかの他)を持っている私は、オブジェクトの状態を予測したいとします。 「週日」はステータスに重要な影響を与えているという仮説があります。 「weektime」では、私は理解しています:Monday 23:17。 今、仮説をテストするために、この形式の列を作成する必要があると思います。新しいコラム「平日%のH:%M」作成タイムスタンプ

私はすでにPOSIXltにタイムスタンプを変換:

training_data$TimeStamp = as.POSIXlt(training_data$TimeStamp, "", "%Y-%m-%d %H:%M:%OS") 

また、私はすでに平日のみでカラムを作成しました。

training_data$TimeStamp_weekday = weekdays(training_data$TimeStamp) 

"weektime"の列を作成する手助けはできますか?

私はまた、予測を簡単にするために、1時間に15分の「タイムスロット」を4つしか持たないと思います。だからMonday 23:17 - > 23:15

0-15 mins -> 0 
15-30 mins -> 15 
30-45 mins -> 30 
45-60 mins -> 45 

またはそれに類するもの。

+0

ようこそスタックオーバーフロー!最初に問題を解決し、問題のコードを投稿してください。ポスターは、既存のコードを批判することを期待しています。 – codeMonkey

+0

ここでは['ifelse'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/ifelse.html)関数が役に立ちます。 – bouncyball

+0

?strptimeを参照してください。私はあなたがフォーマットspec.Alsoで平日を得ることができると確信しているあなたは0分と60分が同じであることを認識する必要があります。 –

答えて

2

lubridate :: weekdayの結果に何かを貼り付ける必要はありません。 trunc.POSIXtがありますが、私が分かる限り分数間隔に切り捨てることはできません。代わりに7.5分(= 0.125時間)を差し引いて、前の15分のマークに切り捨て、同じ量で除算し、その量で四捨五入して乗算します。これは、前の区間マークまで「丸められる」効果を持つはずです。次に、format.POSIXtを使用して目的のフォーマットを取得します。んで何

> Sys.time() 
[1] "2017-12-29 12:24:49 PST" 
> 
format(as.POSIXct(to convert back to datetime 
    round(as.numeric(Sys.time() -0.125 * 60*60)/(0.125 * 60*60)) * 0.125*60*60 , 
      origin="1970-01-01"), "%A %H:%M") 
[1] "Friday 12:15" 

彼らは間隔「マーク」または境界線を中心にしているように、すべての時間をシフトされ、その規模の最も近い整数に丸め、その後、元のスケールに戻す拡大します。

関連する問題