Как отфильтровать или подмножить определенные интервалы даты и времени в R? Смазать?

У меня есть набор данных, состоящий из двух столбцов. Столбец даты и времени и столбец с числовыми значениями. Это простой набор данных, поэтому я его не прикреплял.

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

Расписание занятий отличается от каждого дня недели, т.е. Понедельник 8:00-9:50, 10:30-11:30, 14:50-15:50. Вторник 10.30-11.30, 14.10-15.30, среда... и так далее.

Есть идеи, как я могу это сделать?

Обычно я конвертирую значения даты и времени в формат POSIXct, но недавно прочитал о lubridate.

Я просто до сих пор не уверен, как эффективно подмножить все эти критерии.

Возможно, мне следует сначала разделить данные по дням недели. А затем подмножить разные дни недели в зависимости от времени лекций...

Надеюсь, кто-нибудь может мне помочь.

Кстати: данные за весь 2014 год, поэтому мне действительно приходится избегать данных, когда у класса есть праздники...


person Anna Heebøll    schedule 28.05.2015    source источник
comment
Опубликуйте код, который вы уже пробовали, и укажите, что в нем не работает. Кажется, что простая команда subset справится с этой задачей, как только данные будут организованы удобным способом.   -  person arvi1000    schedule 28.05.2015
comment
Это простой набор данных, поэтому я его не прикреплял — лучше всего прикрепить его, по крайней мере, его образец. Почему? Ну, потому что мы не знаем, что означает класс с лекциями в контексте столбца даты и времени и столбца с числовыми значениями. Похоже, у вас есть какой-то вторичный набор данных, и вы должны выполнить слияние.   -  person Frank    schedule 28.05.2015


Ответы (2)


Преобразование интервалов занятий в interval класс в lubridate. Затем подмножество на основе проверки того, находятся ли даты в интервалах...

> a <- new_interval(Sys.time(), Sys.time() + 120)
> Sys.time() %within% a
[1] TRUE
person cory    schedule 28.05.2015

Я попробую это, где D$Time находится в формате POSIXct:

# Create column with weekday
D$Weekday <- D$Time
D$Weekday <- weekdays(as.Date(D$Time))

# Subset weekdays
MO <- subset(D, D$Weekday == "Monday")
head(MO)
TU <- subset(D, D$Weekday == "Tuesday")
WE <- subset(D, D$Weekday == "Wednesday")
MO <- subset(D, D$Weekday == "Thursday")
MO <- subset(D, D$Weekday == "Friday")
MO <- subset(D, D$Weekday == "Saturday")

# Subset lecture of weekday
MO_L1 <- subset(MO, format(MO$Time, "%H:%M:$S") > "07:55:00" &
              format(MO$Time, "%H:%M:$S") < "09:30:00")
head(MO_L1)
tail(MO_L1)
MO_L2 <- subset(MO, format(MO$Time, "%H:%M:$S") > "10:55:00" &
              format(MO$Time, "%H:%M:$S") < "11:30:00")

И, наконец, объедините все подмножество в новый набор данных...

person Anna Heebøll    schedule 28.05.2015