Nano Hash - криптовалюты, майнинг, программирование

R-Создать новое поле, применяя условие к полю даты.

Я новичок в 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", но все равно не работает.

Есть идеи, как это сделать?

09.07.2018

Ответы:


1
 df %>% mutate_if(is.character, as.POSIXct) %>% 
          mutate(season = case_when(
                          month(date) > 4 & month(date) < 10 ~ "summer",
                          month(date) < 5 & month(date) > 10 ~ "winter"
        ))

Данные

 data <- read.table(text="
                       date
               '2012-02-02 10:04:00'

               '2012-08-13 11:38:00'

               '2012-07-13 14:00:00'

               '2012-09-26 08:45:00'

              ",header=T, stringsAsFactors = F)
09.07.2018
  • season = case_when( month(date) > 4 & month(date) < 10 ~ "summer", TRUE ~ "winter") тоже работает. Нет необходимости в .$ перед датой. 09.07.2018
  • @phiver Спасибо. 09.07.2018
  • Если я правильно понял, часть `is.character, as.POSIXct` выполняет преобразование данных из символа в POSIXct. Что ж, когда я выполняю ваше предложение с вашими данными, оно работает. Но с моей таблицей (даже когда дата также определяется как символ) выдает мне эту ошибку: Ошибка в mutate_impl(.data, dots): Ошибка оценки: символьная строка не в стандартном однозначном формате 09.07.2018
  • Пожалуйста, внимательно проверьте свою переменную, так как некоторые из них могут быть не в формате '2012-02-02 10:04:00'. 09.07.2018
  • есть предложения, как с этим справиться @A.Suliman? Я пытался использовать na.omit , filter (!is.na(data) и na.rm=TRUE. И пока безуспешно. 09.07.2018
  • Это не пропущенное значение, я смог воспроизвести вашу ошибку при изменении «2012-08-13 11:38:00» на «2012-08.13» в данных. Что as.Date(data$date) вернуть. Есть ли NA после запуска as.Date(data$date) или какое-либо сообщение об ошибке 09.07.2018
  • Да, А. Сулиман, я провел тот же эксперимент, и у меня была та же ошибка, но с использованием упомянутого вами преобразования все заработало!! спасибо :) 10.07.2018
  • Я рад, что это помогает. Просто для полноты картины моим следующим шагом будет проверка структуры переменной date с помощью 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
  • @A.Suliman, спасибо за дополнительный совет. Я сейчас занимаюсь расчетом времени (вторая часть моего вопроса). Я пытался преобразовать дату и время только во время, но я получаю только NA. ' data1$date1 ‹- формат(data1$date,%H:%M:%S)' или 'data1$date1 ‹- формат(as.POSIXct(data1$date,format=%Y:%m:%d % H:%M:%S),%H:%M:%S) stackoverflow.com/questions/19292438/split-date-time#19292771 и cyclismo.org/tutorial/R/time.html Последний объясняет, как производить расчеты по времени, но также учитывает дату. Я пытаюсь каталогизировать время по частям дня. У вас есть подсказка? 11.07.2018
  • Второе решение может получить то, что вы хотите, просто я думаю, что в вашем случае годы, месяцы и дни разделены с помощью -, а не :. Итак, вы можете попробовать format(as.POSIXct(data1$date, format="%Y-%m-%d %H:%M:%S"), format="%H:%M:%S") 11.07.2018
  • @ A.Sullivan ...Холли, какой позор!!!, я никогда не ожидал этого! Проблема решена спасибо :) 11.07.2018
  • Не надо, мы все были там раньше. Добро пожаловать ;) 12.07.2018
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..