0

日付/時刻情報を含む小さなデータセットがあります。例えば:

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

それはうまくいきましたが、私が見落としているこれを行うためのより効率的な方法が必要ですか? おそらく、時間列のすべての準備作業を行う必要はありませんでした。今後の参考のために、他にどのようなオプションがあるかを知りたいと思っています。

4

0 に答える 0