Преобразование даты в R

#r

#r

Вопрос:

У меня есть столбец даты в приведенном ниже формате. Я пытаюсь извлечь день недели. Но оно возвращает NA.

 df = data.frame(date=c("05-SEP-18", "10-SEP-18", "22-SEP-18"))
str(df)
'data.frame':   3 obs. of  1 variable:
 $ date: Factor w/ 3 levels "05-SEP-18","10-SEP-18",..: 1 2 3
df$day <- weekdays(as.Date(df$date, '%d-%M-%Y'))
head(df)
   date  day 
1 05-SEP-18 <NA>
2 10-SEP-18 <NA>
3 22-SEP-18 <NA>
  

Я преобразовал коэффициенты в char. Он по-прежнему возвращает NA

 df$date <- as.character(df$date)
df$day <- weekdays(as.Date(df$date, '%d-%M-%Y'))
head(df)
date  day 1 05-SEP-18 <NA> 2 10-SEP-18 <NA> 3 22-SEP-18 <NA>
  

Пожалуйста, любая помощь?

Комментарии:

1. Почти уверен, что это %Y четырех значный год. У вас есть только две цифры.

2. И %M для числового месяца. %b это сокращенный месяц.

Ответ №1:

Попробуйте as.Date(df$date, '%d-%b-%y') . %y% это двузначный год. %b% это символьное сокращение месяца.

https://www.google.com/amp/s/www.r-bloggers.com/date-formats-in-r/amp/

Ответ №2:

Попробуйте это с пакетом lubridate:

 library(lubridate)
df = data.frame(date = c("05-SEP-18", "10-SEP-18", "22-SEP-18"))
df$date <- as.Date(df$date)
#define timezone
lct <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME", "C")
df$date <- as.Date(df$date, format = "%d-%b-%y")
wd <- weekdays(df$date)
  

Надеюсь, это поможет

Ответ №3:

как упоминалось выше, lubridate это простое решение для анализа даты, а затем использования tidyverse для объединения функций и создания новых столбцов:

   df %>% 
    mutate(date = dmy(date)) %>% 
    mutate(day  = weekdays(date))

        date       day
1 2018-09-05 Wednesday
2 2018-09-10    Monday
3 2018-09-22  Saturday
  

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