Именование суточных интервалов в R

Я работаю с данными акустической телеметрии и пытаюсь разделить столбец «часы» на интервалы. В идеале я хотел бы сказать, что timeperiod1 является «ранним», если он приходится на период с 00:00:01 до 06:00:00 и т. д. или что-то в этом роде. Я уже использовал strptime и POSIXct для форматирования даты и времени и внесения часов в свой собственный столбец. Я просто очень застрял в создании и названии этого нового столбца «период времени», поэтому я могу запустить ANOVA.
Спасибо!


person Hillary Ann Dean    schedule 30.04.2018    source источник
comment
В будущем было бы здорово, если бы вы могли включить пример набора данных, который люди могут использовать для решения вашей проблемы. Ознакомьтесь с этим FAQ, чтобы узнать, как это сделать: stackoverflow.com/questions/5963269/   -  person qdread    schedule 30.04.2018
comment
Спасибо, я пытался вставить сюда несколько строк своего фрейма данных, и он продолжал отклонять мой пост.   -  person Hillary Ann Dean    schedule 30.04.2018


Ответы (1)


В пакете lubridate есть хорошие функции, такие как hour(), year() и т. д., которые извлекают соответствующий компонент объекта даты. Вот пример того, как вы можете использовать это для создания нового столбца в игрушечном наборе данных с 24-часовым временем и использовать ifelse(), который является векторизованным if, чтобы классифицировать время как более раннее, если оно до 06:00:00. .

fake_times <- data.frame(time = as.POSIXct('2018-04-01 00:00:01') + (0:23) * 3600)

library(lubridate)

fake_times$hour <- hour(fake_times$time)
fake_times$timeperiod <- ifelse(fake_times$hour < 6, 'early', 'late')

Вывод выглядит так.

   time                   hour   timeperiod
1  2018-04-01 00:00:01    0      early
2  2018-04-01 01:00:01    1      early
3  2018-04-01 02:00:01    2      early
4  2018-04-01 03:00:01    3      early
5  2018-04-01 04:00:01    4      early
6  2018-04-01 05:00:01    5      early
7  2018-04-01 06:00:01    6       late
8  2018-04-01 07:00:01    7       late
9  2018-04-01 08:00:01    8       late
10 2018-04-01 09:00:01    9       late
11 2018-04-01 10:00:01   10       late
12 2018-04-01 11:00:01   11       late
13 2018-04-01 12:00:01   12       late
14 2018-04-01 13:00:01   13       late
15 2018-04-01 14:00:01   14       late
16 2018-04-01 15:00:01   15       late
17 2018-04-01 16:00:01   16       late
18 2018-04-01 17:00:01   17       late
19 2018-04-01 18:00:01   18       late
20 2018-04-01 19:00:01   19       late
21 2018-04-01 20:00:01   20       late
22 2018-04-01 21:00:01   21       late
23 2018-04-01 22:00:01   22       late
24 2018-04-01 23:00:01   23       late
person qdread    schedule 30.04.2018
comment
поэтому я не уверен, где моя ошибка, но она классифицирует все как раннее - person Hillary Ann Dean; 30.04.2018
comment
поэтому в идеале я хотел бы классифицировать так: создать разделение периодов времени рано = полночь-6 утра день = 6:01-полдень середина = 13:01-18:00 ночь = 18:01-23:59 спасибо за Помогите им ближе, чем я был! - person Hillary Ann Dean; 30.04.2018
comment
@HillaryAnnDean В этом случае вы захотите сделать это после создания столбца hour: fake_times$timeperiod <- cut(fake_times$hour, breaks = c(0, 6, 12, 18, 24), right = FALSE, labels = c('early', 'day', 'mid', 'night')). Это делает фактор с четырьмя уровнями разделенными там, где вы указали, с указанными вами метками. - person qdread; 30.04.2018
comment
вы восхитительны спасибо! я закончил все, используя cast and Melt и код, который вы мне дали, так что все, что мне нужно выяснить, это мои тесты на нормальность, графики и ANOVA, и я закончил :) Я дурачился с этим кодом в течение 4 дней. - person Hillary Ann Dean; 30.04.2018
comment
@HillaryAnnDean К вашему сведению, если вы считаете этот ответ правильным, примите его, чтобы другие увидели, что это хорошее решение. - person qdread; 01.05.2018
comment
Сделаю . ps мы соседи Im в UT - person Hillary Ann Dean; 01.05.2018