Tidyverse Parse Date String - PullRequest
       7

Tidyverse Parse Date String

0 голосов
/ 10 сентября 2018

У меня есть столбец «дата» во фрейме данных, который имеет пробел после даты. Я хочу FIND пробел, затем перейти LEFT в эту позицию минус 1 место и преобразовать эту строку в дату. Это типичный пример:

library(tidyverse)
library(lubridate)

my_sales <- c(10, 15, 20, 15)
my_dates <- c("12/30/02 0:00", "1/4/03 0:00", "1/11/03 0:00", "1/19/03 0:00")
df <- data.frame(my_sales, my_dates)
df$my_dates <- as.character(df$my_dates)

df$my_dates_temp1 <- str_sub(df$my_dates, 1, str_locate(df$my_dates, ' ')[, 1]-1)
head(df)

>   my_sales      my_dates my_dates_temp1
> 1       10 12/30/02 0:00       12/30/02
> 2       15   1/4/03 0:00         1/4/03
> 3       20  1/11/03 0:00        1/11/03
> 4       15  1/19/03 0:00        1/19/03

Моя проблема возникает, когда я пытаюсь преобразовать my_dates_temp1 в дату.

База R

as.Date(df$my_dates_temp1)
> Error in charToDate(x) : 
>   character string is not in a standard unambiguous format

lubridate

lubridate::as_date(df$my_dates_temp1)
> [1] NA NA NA NA
> Warning message:
> All formats failed to parse. No formats found. 

Как это не в формате, который можно преобразовать в дату, и как я могу преобразовать это?

1 Ответ

0 голосов
/ 10 сентября 2018

Нам нужен format, поскольку он не имеет формат по умолчанию "YYYY-MM-DD"

as.Date(df$my_dates_temp1, "%m/%d/%y")
#[1] "2002-12-30" "2003-01-04" "2003-01-11" "2003-01-19"

или используйте

lubridate::mdy(df$my_dates_temp1)
#[1] "2002-12-30" "2003-01-04" "2003-01-11" "2003-01-19"
...