Добавление нового столбца в фрейме данных R на основе временных интервалов. День Ночь - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу добавить новый столбец в мой фрейм данных на основе временного интервала. Для времени 10:00 - 15:00 я хочу добавить «день» в новую колонку, для 22: 00-03: 00 я хочу добавить «ночь». Кроме того, я хочу исключить все строки, которые не находятся в одном из интервалов

, которые я уже использовал как .POSIXct.

Вот что я хочу:

hour    D_N
10:31   day
01:10   night
12:03   day
14:51   day

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Так что это мой фрейм данных. Я попробовал ваш код, но он не исключает случаев, когда я не хочу иметь: 15: 00-22: 00 и 03: 00-10: 00

          date  time           date_time
1   2017-05-25 10:16 2017-05-25 10:16:00
2   2017-05-27 13:16 2017-05-27 13:16:00
3   2017-05-28 05:31 2017-05-28 05:31:00
4   2017-05-28 08:01 2017-05-28 08:01:00
5   2017-05-29 14:31 2017-05-29 14:31:00
6   2017-05-30 09:01 2017-05-30 09:01:00
7   2017-05-31 03:31 2017-05-31 03:31:00
8   2017-05-31 07:16 2017-05-31 07:16:00
9   2017-06-03 06:01 2017-06-03 06:01:00
10  2017-06-03 10:16 2017-06-03 10:16:00
11  2017-06-03 14:01 2017-06-03 14:01:00
12  2017-06-04 05:31 2017-06-04 05:31:00
13  2017-06-04 12:16 2017-06-04 12:16:00
14  2017-06-04 15:16 2017-06-04 15:16:00
15  2017-06-05 03:31 2017-06-05 03:31:00

, поэтому я хочу:

          date  time           date_time  D_N
1   2017-05-25 10:16 2017-05-25 10:16:00   day
2   2017-05-27 13:16 2017-05-27 13:16:00   day
3   2017-05-28 05:31 2017-05-28 05:31:00       #should be excluded
4   2017-05-28 08:01 2017-05-28 08:01:00       #should be excluded
5   2017-05-29 14:31 2017-05-29 14:31:00   day
6   2017-05-30 09:01 2017-05-30 09:01:00       #should be excluded
7   2017-05-31 03:31 2017-05-31 03:31:00 night
8   2017-05-31 07:16 2017-05-31 07:16:00       #should be excluded
9   2017-06-03 06:01 2017-06-03 06:01:00       #should be excluded
10  2017-06-03 10:16 2017-06-03 10:16:00   day
11  2017-06-03 14:01 2017-06-03 14:01:00   day
12  2017-06-04 05:31 2017-06-04 05:31:00       #should be excluded
13  2017-06-04 12:16 2017-06-04 12:16:00   day
14  2017-06-04 15:16 2017-06-04 15:16:00       #should be excluded
15  2017-06-05 03:31 2017-06-05 03:31:00 night
as a result I want:

чтобы получить это:

          date  time           date_time  D_N
1   2017-05-25 10:16 2017-05-25 10:16:00   day
2   2017-05-27 13:16 2017-05-27 13:16:00   day
5   2017-05-29 14:31 2017-05-29 14:31:00   day
7   2017-05-31 03:31 2017-05-31 03:31:00 night
10  2017-06-03 10:16 2017-06-03 10:16:00   day
11  2017-06-03 14:01 2017-06-03 14:01:00   day
13  2017-06-04 12:16 2017-06-04 12:16:00   day
15  2017-06-05 03:31 2017-06-05 03:31:00 night

0 голосов
/ 07 ноября 2019

Мы можем использовать lubridate и dplyr пакет. Преобразовать столбец в класс Period и извлечь из него hour. Назначьте "day" и "night" в соответствии с hour дня и удалите строки, которые не лежат в одном из этих интервалов.

library(lubridate)
library(dplyr)

df %>%
  mutate(hour = hour(hm(hour1)), 
         D_N = case_when(hour %in% 10:15 ~ "day", 
                         hour %in% 22:23 | hour %in% 1:3 ~ "night", 
                         TRUE ~ NA_character_)) %>%
  filter(!is.na(D_N))

#  hour1 hour   D_N
#1 10:31   10   day
#2 01:10    1 night
#3 12:03   12   day
#4 14:51   14   day

данные

df <- structure(list(hour1 = structure(c(2L, 1L, 3L, 5L, 4L), .Label = c("01:10", 
"10:31", "12:03", "14:51", "16:03"), class = "factor")), 
class = "data.frame", row.names = c(NA, -5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...