R

时间:2019-03-14 16:05:03

标签: 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>

请帮忙吗?

3 个答案:

答案 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之类的功能可以简化此操作。

相关问题