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

Это сработало, но должен быть более эффективный способ сделать это, что я пропускаю? Возможно, мне не нужно было делать всю подготовительную работу со столбцом времени, и мне любопытно посмотреть, какие еще есть варианты для дальнейшего использования.

0 ответов

Другие вопросы по тегам