日付/時刻情報を含む小さなデータセットがあります。例えば:
type start end price time
rental location A Location B 0 23:50:00
rental location A Location B 0 18:32:00
rental location A Location B 0 10:10:00
rental location A Location B 0 09:54:00
rental location A Location B 0 20:48:00
R で一連の if/or ステートメントを記述して、オン ピーク時間とオフ ピーク時間の価格を表示する新しい列 (価格) を作成したいと考えています。これは自転車のレンタル時間を示すデータセットで、ピーク時の公共交通機関の移動費用と比較したいと考えています。したがって、列にprice
は 2.9 ドルと 2.4 ドルの 2 つの値が可能です。
ピーク時間は 6:30 ~ 9:30 と 16:30 ~ 19:30 です。これを行うにはもっと良い方法が必要ですが、今では次の一連の条件を書きました。
まず、 と を使用して、データから時間と分を個別に分割as.POSIXlt
できるように使用$hour
しました。$min
最初のデータフレームはdata
time2 <- strptime(data$time, "%H:%M:%OS")
posixlt <- as.POSIXlt(time2, format="%d-%m-%Y %H:%M:%S")
names(unclass(posixlt))
peak <- posixlt
時間を含む新しいpeak
列から、元のデータと時間と分の別の列を含む新しい data.frame を生成したいと思います。
df <-cbind(data,peak$hour, peak$min)
as.numeric(peak$hour)
as.numeric(peak$min)
次に、さまざまな時間の可能性と列のそれぞれの価格を考慮して条件を設定しdf$price
ます。
df$price[peak$hour <6] <- 2.4
df$price[((peak$hour >= 6) & (peak$hour <=9))] <- 2.9
df$price[peak$hour==9 & peak$min >=30] <- 2.4
df$price[peak$hour>9 & peak$hour <=16] <- 2.4
df$price[peak$hour==16 & peak$min >=30] <- 2.9
df$price[peak$hour>16 & peak$hour<19] <- 2.9
df$price[peak$hour>19] <- 2.4
df$price[peak$hour==19 & peak$min <=30] <- 2.9
df$price[peak$hour==19 & peak$min >=30] <- 2.4
それはうまくいきましたが、私が見落としているこれを行うためのより効率的な方法が必要ですか? おそらく、時間列のすべての準備作業を行う必要はありませんでした。今後の参考のために、他にどのようなオプションがあるかを知りたいと思っています。