Могу ли я использовать пакет R, смазанный для разбора дат, если мой месяц, день и год находятся в отдельных столбцах? - PullRequest
0 голосов
/ 17 февраля 2020

Я новичок в использовании R, но я пытаюсь научиться использовать его, чтобы сделать мой анализ данных более воспроизводимым. Мои даты введены в три столбца для даты возврата и в три столбца для даты получения (один для месяца, один для дня и один для года). Мне нужно, чтобы R мог распознать его как дату, чтобы я мог рассчитать время в поле как часть года (days / 365). Я установил пакет lubridate и попытался использовать функцию mdy (), но она выдала мне следующее сообщение об ошибке:

Error: Column `drop_off_date` must be length 150 (the number of rows) or one, not 450
In addition: Warning message:
All formats failed to parse. No formats found. 

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

mutate(drop_off_date = mdy(dropoff_month, dropoff_day, dropoff_year),
         pickup_date = mdy(pickup_month, pickup_day, pickup_year),

Есть ли у кого-нибудь какие-либо предложения для другой функции или что я мог бы исправить, чтобы использовать эту функцию?

1 Ответ

0 голосов
/ 17 февраля 2020

Функции lubridate принимают один вектор строк. Мой первый комментарий предположил, что paste0 тоже может работать, но не напрямую (см. Код ниже), поэтому вам нужно включить sep arator (например, paste по умолчанию " " пробел).

library(lubridate)
### wrong
mdy(10, 13, 2018)
# Warning: All formats failed to parse. No formats found.
# [1] NA NA NA

### some fixed
mdy(paste(10, 13, 2018))
# [1] "2018-10-13"

library(dplyr)
data.frame(y=c(2018,2019), m=c(10,9), d=c(30,1)) %>%
  mutate(date = mdy(paste(m, d, y)))
#      y  m  d       date
# 1 2018 10 30 2018-10-30
# 2 2019  9  1 2019-09-01
...