Создание временных интервалов в R - PullRequest
0 голосов
/ 14 мая 2018

У меня есть набор данных в R с 20000 записей. Каждая запись имеет определенное время и дату, когда это произошло. Я хочу создать временные интервалы по 6 часов каждый, то есть - с 6:00 до 12:00, с 12:00 до 18:00 ... и т. Д. И т. Д. И убедиться, что данные отсортированы в соответствии с этим. Дата не нужна. Мне просто нужно отсортировать данные по временному интервалу.

Например Если запись имеет время 12:35, она будет отсортирована в интервале с 12:00 до 18:00.

Все идеи приветствуются. S.

1 Ответ

0 голосов
/ 14 мая 2018
# create a dataframe with a column that represents a time
df <- data.frame(MyTimes = c("02:50:00","06:00:00", "11:10:30", "13:15:50", "17:00:00", "23:45:20"), 
                 stringsAsFactors=FALSE)

# create a "time interval" column
df$Interval <- NA
df$Interval[df$MyTimes %between% c("00:00:00", "06:00:00")] <- "0 AM - 6 AM"
df$Interval[df$MyTimes %between% c("06:00:00", "12:00:00")] <- "6 AM - 12 PM"
df$Interval[df$MyTimes %between% c("12:00:00", "18:00:00")] <- "12 PM - 6 PM"
df$Interval[df$MyTimes %between% c("18:00:00", "24:00:00")] <- "6 PM - 0 AM"
df
#    MyTimes     Interval
# 1 02:50:00  0 AM - 6 AM
# 2 06:00:00 6 AM - 12 PM
# 3 11:10:30 6 AM - 12 PM
# 4 13:15:50 12 PM - 6 PM
# 5 17:00:00 12 PM - 6 PM
# 6 23:45:20  6 PM - 0 AM

A более эффективный способ - сначала преобразовать в секунды, а затем использовать findInterval ()

   df$seconds <- period_to_seconds(hms(df$MyTimes))
    myIntervals <- c("0 AM - 6 AM", "6 AM - 12 PM", "12 PM - 6 PM", "6 PM - 0 AM")
    df$Interval<- myIntervals[findInterval(df$seconds, c(0, 6, 12, 18, 24) * 3600)]
    #    MyTimes     Interval seconds
    # 1 02:50:00  0 AM - 6 AM   10200
    # 2 06:00:00 6 AM - 12 PM   21600
    # 3 11:10:30 6 AM - 12 PM   40230
    # 4 13:15:50 12 PM - 6 PM   47750
    # 5 17:00:00 12 PM - 6 PM   61200
    # 6 23:45:20  6 PM - 0 AM   85520
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...