Я новичок в R. Я работаю с Windows 10. У меня R Studio и R версии 3.5.0.
У меня есть таблица с одним полем формата dateTime.
2012-02-02 10:04:00
2012-08-13 11:38:00
2012-07-13 14:00:00
2012-09-26 08:45:00
2012-10-24 05:39:00
2012-02-03 03:33:00
2012-05-02 06:30:00
2012-06-27 09:00:00
2012-07-09 10:16:00
2012-11-22 13:13:00
Мне нужно создать новое поле, которое разделяет данные между летом и зимой: с мая по сентябрь будет лето, а с октября по апрель — зима. На основе результата этого нового поля создайте еще одно, разделяющее данные по времени суток: утро, полдень, день и ночь для лета и то же самое для зимы. Условия будут такими:
For Summer * Morning Summer: 5 am – 10 am
* Noon Summer: 10 am -12 pm
* Afternoon Summer: 12 pm -8 pm
* Night summer 8 pm – 5 am
For Winter
* Morning Winter: 7 am – 11 am
* Noon Winter: 11 am -12 pm
* Afternoon Winter: 12 pm -4 pm
* Night Winter 4 pm – 7 am
результат будет примерно таким:
date | season | time Of Day
'2012-02-02 10:04:00' | winter | morning
'2012-08-13 11:38:00' | summer | noon
'2012-07-13 14:00:00' | summer | afternoon
'2012-09-26 08:45:00' | summer | morning
'2012-10-24 05:39:00' | winter | night
'2012-02-03 03:33:00' | winter | night
'2012-05-02 06:30:00' | summer | morning
'2012-12-27 09:00:00' | winter | morning
'2012-07-09 10:16:00' | summer | morning
'2012-11-22 13:13:00' | winter | afternoon
Для первого случая (разделенного на лето и зиму) я попытался использовать case_when, но это не сработало:
df %>%
mutate(season = case_when(
month(.$date) > 4 & month(.$date)< 10 ~ "summer",
month(.$date) < 5 & month(.$date) > 10 ~ "winter"
))
Error in mutate_impl(.data, dots) : Evaluation error: do not know how to convert 'x' to class <U+0093>POSIXlt<U+0094>.
Я пытался найти что-то по поводу ошибки, но, честно говоря, так и не понял, как решить проблему. Я пытался использовать библиотеку "lubridate", но все равно не работает.
Есть идеи, как это сделать?
season = case_when( month(date) > 4 & month(date) < 10 ~ "summer", TRUE ~ "winter")
тоже работает. Нет необходимости в .$ перед датой. 09.07.2018as.Date(data$date)
вернуть. Есть ли NA после запускаas.Date(data$date)
или какое-либо сообщение об ошибке 09.07.2018date
с помощьюgrepl('[0-9]{4}-[0-9]{2}-[0-9]{2}\\s{1}[0-9]{2}:[0-9]{2}:[0-9]{2}', data$date)
, чтобы увидеть, есть ли какие-либо записи с другой структурой. 10.07.2018-
, а не:
. Итак, вы можете попробоватьformat(as.POSIXct(data1$date, format="%Y-%m-%d %H:%M:%S"), format="%H:%M:%S")
11.07.2018