我有这样的数据帧:
> 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 ...不工作..。
发布于 2014-01-10 02:29:39
@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表示不含世纪的年份。
或
您可以安装漂亮的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不会有什么坏处。
发布于 2014-01-17 18:16:54
> 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" ...https://stackoverflow.com/questions/21024116
复制相似问题