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

时间:2015-02-14 23:26:06

标签: r date

我正在从网上抓取一些数据,并将其作为列表读取。我转换为数据帧,然后将所有数据作为因子读取。我能够转换日期因子,显示为(例子)" 2008年2月2日和#34;对于角色,但在这一点上它是一种尴尬的格式,' as.date'函数无法将字符作为日期读入 这里有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你会有这样的事情:

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"

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

编辑:

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

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

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"