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。

高峰时间在 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