首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将系数转换为日期

无法将系数转换为日期
EN

Stack Overflow用户
提问于 2014-01-09 23:18:42
回答 2查看 323关注 0票数 0

我有这样的数据帧:

代码语言:javascript
复制
    > 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

我试过了

代码语言:javascript
复制
    > 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 ...

代码语言:javascript
复制
 > 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 ...

不工作..。

EN

回答 2

Stack Overflow用户

发布于 2014-01-10 02:29:39

@rawr,@joran和@SimonO‘’Hanlon都很准确。原生R解决方案看起来像这样:

代码语言:javascript
复制
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()函数,该函数非常擅长识别字符串的格式。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-01-17 18:16:54

代码语言:javascript
复制
> 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,然后它就可以正常工作了。

代码语言:javascript
复制
> 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" ...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21024116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档