我有这样的数据框:
> a=runif(5)
> b=c("1-Jan-13", "2-Jan-13", "3-Jan-13", "4-Jan-13", "5-Jan-13")
> dd = data.frame(a,b)
> dd
a b
1 0.1873622 1-Jan-13
2 0.1902314 2-Jan-13
3 0.7476141 3-Jan-13
4 0.3584118 4-Jan-13
5 0.2152858 5-Jan-13
> str(dd)
'data.frame': 5 obs. of 2 variables:
$ a: num 0.187 0.19 0.748 0.358 0.215
$ b: Factor w/ 5 levels "1-Jan-13","2-Jan-13",..: 1 2 3 4 5
我试过
> dd$b <- as.Date(dd$b, format="%d/%m/%Y")
> str(dd)
'data.frame': 5 obs. of 2 variables:
$ a: num 0.187 0.19 0.748 0.358 0.215
$ b: Date, format: NA NA NA NA ...
和
> dd = data.frame(a,b)
> dd$b <- as.Date(dd$b, format="%d-%m-%Y")
> str(dd)
'data.frame': 5 obs. of 2 variables:
$ a: num 0.187 0.19 0.748 0.358 0.215
$ b: Date, format: NA NA NA NA ...
不起作用......
答案 0 :(得分:1)
@rawr,@ joran和@ SimonO'Hanlon都是现货。本机R解决方案看起来像:
a <- runif(5)
b <- c("1-Jan-13", "2-Jan-13", "3-Jan-13", "4-Jan-13", "5-Jan-13")
dd <- data.frame(a, b=as.Date(b, format="%d-%b-%y"))
str(dd)
## 'data.frame': 5 obs. of 2 variables:
## $ a: num 0.947 0.997 0.39 0.913 0.178
## $ b: Date, format: "2013-01-01" ...
%b
是月份名称的简短版本,%y
表示没有世纪的年份。
OR
您可以安装spiffy lubridate
软件包,并使用真正的ymd()
函数来确定字符串的格式。
install.packages("lubridate")
library(lubridate)
dd <- data.frame(a, b=dmy(b))
str(dd)
## 'data.frame': 5 obs. of 2 variables:
## $ a: num 0.947 0.997 0.39 0.913 0.178
## $ b: POSIXct, format: "2013-01-01" ...
只要您使用POSIXct
类型与Date
类型相比,您接下来所做的一切都很酷,那么您就是金色的。
正如@joran所说的那样,对?strptime
进行调查并没有什么坏处。
答案 1 :(得分:-1)
> dd
a b
1 0.2102705 1-Jan-13
2 0.9018757 2-Jan-13
3 0.4113829 3-Jan-13
4 0.2685403 4-Jan-13
5 0.4664033 5-Jan-13
> str(dd)
'data.frame': 5 obs. of 2 variables:
$ a: num 0.21 0.902 0.411 0.269 0.466
$ b: Factor w/ 5 levels "1-Jan-13","2-Jan-13",..: 1 2 3 4 5
我将月份格式从%m更改为%b,年份从%Y更改为%y,然后就可以了。
> str(dd)
'data.frame': 5 obs. of 2 variables:
$ a: num 0.21 0.902 0.411 0.269 0.466
$ b: Date, format: "2013-01-01" "2013-01-02" "2013-01-03" "2013-01-04" ...