#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
, упрощает это, когда дата находится в несколько стандартном формате.