我有以下格式的日期列。我正在尝试提取星期几。但是它返回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>
请帮忙吗?
答案 0 :(得分:0)
尝试as.Date(df$date, '%d-%b-%y')
。 %y%
是两位数的年份。
%b%
是字母缩写的月份。
https://www.google.com/amp/s/www.r-bloggers.com/date-formats-in-r/amp/
答案 1 :(得分:0)
尝试使用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)
希望有帮助
答案 2 :(得分:0)
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
之类的功能可以简化此操作。