if или оператор для создания нового столбца из временных данных в R
У меня есть небольшой набор данных, содержащий некоторую информацию о дате / времени. например:
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
Я хочу написать набор операторов if / или в R для создания нового столбца (цены), который отображает цену для пикового времени включения и выключения. Это набор данных, показывающий время проката велосипедов, и я хочу сравнить его со стоимостью поездок на общественном транспорте в часы пик. Итак, в столбце возможно два значения 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
Это сработало, но должен быть более эффективный способ сделать это, что я пропускаю? Возможно, мне не нужно было делать всю подготовительную работу со столбцом времени, и мне любопытно посмотреть, какие еще есть варианты для дальнейшего использования.