Преобразовать данные в дату, месяц, год в lubridate в R - PullRequest
0 голосов
/ 22 октября 2019

У меня есть dataframe со столбцом с датами, столбец называется dateDecision. Они в формате 1970/01/01. Я пытаюсь разбить дату на столбцы year, month и date. Я использовал следующий код

df %>% mutate(year = lubridate::year(dateDecision), 
                month = lubridate::month(dateDecision), 
                day = lubridate::day(dateDecision))

Я получаю сообщение об ошибке «Ошибка в as.POSIXlt.character(x, tz = tz(x)) : character string is not in a standard unambiguous format

Когда я использую dput (head (df, 10))», это вывод

structure(list(term = c("1791", "1791", "1791", "1791", "1791", 
"1792", "1792", "1792", "1792", "1792"), dateDecision = c("8/3/1791", 
"8/3/1791", "8/3/1791", "8/3/1791", "8/3/1791", "8/11/1792", 
"8/11/1792", "8/11/1792", "8/11/1792", "8/11/1792"), decisionType = c("6", 
"6", "6", "6", "6", "8", "8", "8", "8", "8"), dateArgument = c("8/2/1791", 
"8/2/1791", "8/2/1791", "8/2/1791", "8/2/1791", "8/9/1792", "8/9/1792", 
"8/9/1792", "8/9/1792", "8/9/1792")), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

Как это исправить?

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Сначала используйте библиотеку anytime::anydate(), чтобы преобразовать столбец dateDecision в дату:

library(anytime)
    date <- "1970/01/01"
    anytime::anydate(date)
    [1] "1970-01-01"

Затем запустите mutate. Вы также можете использовать tk_augment_timeseries_signature() из timetk и выбирать только столбцы year, month и date.

library(timetk)
library(tidyverse)

# make some reproducible data
dates <-
    seq(as.Date('2019-01-01'), as.Date('2019-12-31'), by = 'days') 

dates <- as_tibble(dates)

#add the time signature features including year, month, day, day of week, day of month, #day of year, hour, minute, second to the input data

dates %>% 
tk_augment_timeseries_signature()
1 голос
/ 22 октября 2019

Вам необходимо сначала преобразовать столбец dateDecision в дату, используя lubridate

df %>% mutate(dateDecision=lubridate::mdy(dateDecision),
              year = lubridate::year(dateDecision), 
              month = lubridate::month(dateDecision), 
              day = lubridate::day(dateDecision))
...