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