将 '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"
我正在从网上抓取一些数据,它以列表的形式读入。我转换为数据框,然后将所有数据作为因子读取。我能够将显示为(示例)“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"