将 'YYYY mmm DD' 字符格式转换为 R 中的日期

Converting 'YYYY mmm DD' character format to date in R

我正在从网上抓取一些数据,它以列表的形式读入。我转换为数据框,然后将所有数据作为因子读取。我能够将显示为(示例)“2008 Feb 02”的日期因子转换为字符,但此时它是一种笨拙的格式,'as.date' 函数无法将字符作为日期读取。
有什么想法吗?

如果我没理解错的话,你是这样的:

df<-data.frame(some_column=c('A', 'B', 'C')
              ,some_other_column=c('1', '2', '3')
              ,date=c("2008 Feb 02", "1970 Jan 01", "2015 Feb 15") 
              ,stringsAsFactors=TRUE)
str(df)
'data.frame':   3 obs. of  3 variables:
 $ some_column      : Factor w/ 3 levels "A","B","C": 1 2 3
 $ some_other_column: Factor w/ 3 levels "1","2","3": 1 2 3
 $ date             : Factor w/ 3 levels "1970 Jan 01",..: 2 1 3

到目前为止,您已经完成了如下操作:

date.chr<-as.character(df$date)
str(date.chr)
chr [1:3] "2008 Feb 02" "1970 Jan 01" "2015 Feb 15"

你真正想做的可能是这样的:

date<-strptime(date.chr, format="%Y %b %d")
str(date)
POSIXlt[1:3], format: "2008-02-02" "1970-01-01" "2015-02-15"

或者,合并并缩短以上内容:

df$date<-strptime(df$date, "%Y %b %d")
str(df)
'data.frame':   3 obs. of  3 variables:
 $ some_column      : Factor w/ 3 levels "A","B","C": 1 2 3
 $ some_other_column: Factor w/ 3 levels "1","2","3": 1 2 3
 $ date             : POSIXlt, format: "2008-02-02" "1970-01-01" "2015-02-15"

有关 format 选项的详细文档,请参阅 ?strptime

编辑:

正如 BondedDust 所指出的,as.Date 也支持 format 选项,并且由于 [=24] 的列表性质,在数据框的上下文中会更合适=].

所以这个解决方案绝对更可取:

df$date<-as.Date(df$date, "%Y %b %d")
str(df)
'data.frame':   3 obs. of  3 variables:
 $ some_column      : Factor w/ 3 levels "A","B","C": 1 2 3
 $ some_other_column: Factor w/ 3 levels "1","2","3": 1 2 3
 $ date             : Date, format: "2008-02-02" "1970-01-01" "2015-02-15"