Использование функций с dplyr для анализа дат

У меня есть код в R, который манипулирует временными метками с помощью dyplr. Код ниже. По сути, мы отправляем электронное письмо в определенное время и получаем ответ — если он есть. Я хотел извлечь ряд атрибутов как из отправленных, так и из ответных элементов.

Участвуют 3 страны, и у них метки времени настроены по-разному. Например, Великобритания имеет метку времени, например: 2015-03-11 09:32:51, тогда как две другие страны имеют метки времени, такие как 03.02.2015 08: 02

Я создал приведенный ниже код на основе моего изучения dplyr, и я хочу создать из него функцию, но я получаю ошибки

udf_parsedates <- function(strFormat) 
  {
Email <- Email %>%
mutate(Email.dtm = parse_date_time(SMS.Date,strFormat),
       Email.Hour = as.numeric(format(SMS.dtm,"%H")),
       Email.Dow = wday(SMS.dtm, label=TRUE, abbr=FALSE),
       Rep.dtm = parse_date_time(Reply.Date,strFormat),
       Rep.Hour = as.numeric(format(Rep.dtm,"%H")),
       Rep.Dow = wday(Rep.dtm, label=TRUE, abbr=FALSE),
       ResponseTime.Hours = as.numeric(difftime(Rep.dtm, SMS.dtm, units="hours")))
  }

# Find hour and DOW of the Email

  if(Email$dest_ctry == 'GB') {udf_parsedates("%Y-%m-%d %H:%M:%S")
    } else if (SMS$dest_ctry == 'IT') {udf_parsedates("%Y/%m/%d %H:%M")
    } else if (SMS$dest_ctry == 'ES') {udf_parsedates("%Y/%m/%d %H:%M")}

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


person John Smith    schedule 22.07.2015    source источник


Ответы (1)


Если бы это был я, я бы попытался создать столбец, показывающий формат даты, а затем использовать и ifelse для правильного преобразования в объект POSIXct

Эта строка в вашем вызове mutate будет генерировать формат даты

date_format = ifelse(grepl("\\d{4}-\\d{2}-\\d{2} ", SMS.Date), "ymd", "mdy")
person Benjamin    schedule 22.07.2015
comment
какой умный способ приблизиться к нему. Работает очень хорошо ... спасибо за ваш ответ - person John Smith; 23.07.2015