首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >as.Date函数不转换日期

as.Date函数不转换日期
EN

Stack Overflow用户
提问于 2014-04-02 21:13:37
回答 1查看 22.2K关注 0票数 6

我有一个关于as.Date函数的小问题。我加载了一个csv格式的prn数据,我的老师说这没问题,然后当我尝试用标准的方式(y,m,d)设置日期时,它会给我一个疯狂的年份数字。PZU文件是波兰公司的股票价格。此外,我也不太确定如何设置时间。如果能帮上忙我会很感激的。仅供参考,我使用带有R studio界面的R软件。

代码语言:javascript
复制
pzu<-read.csv("PZU.prn",header=F)[,1:7]
names(pzu)<-c("name","date","time","open","high","low","close")
head(pzu)
#  name     date time open high low close
#1  PZU 20100512  845  349  349 349   349
#2  PZU 20100512  845  349  349 349   349
#3  PZU 20100512  845  349  349 349   349
#4  PZU 20100512  845  349  349 349   349
#5  PZU 20100512  845  349  349 349   349
#6  PZU 20100512  845  349  349 349   349

class(pzu$date) # output is an "integer"

str(pzu)
#data.frame':   960638 obs. of  7 variables:
# $ name : Factor w/ 1 level "PZU": 1 1 1 1 1 1 1 1 1 1 ...
# $ date : int  20100512 20100512 20100512 20100512 20100512 20100512 20100512 20100512 20100512 20100512 ...
# $ time : int  845 845 845 845 845 845 845 845 845 845 ...
# $ open : num  349 349 349 349 349 349 349 349 349 349 ...
# $ high : num  349 349 349 349 349 349 349 349 349 349 ...
# $ low  : num  349 349 349 349 349 349 349 349 349 349 ...
# $ close: num  349 349 349 349 349 349 349 349 349 349 ...

pzu$date<-as.Date(pzu$date)
head(pzu)
#name       date time open high low close
#1  PZU 7003-05-03  845  349  349 349   349
#2  PZU 7003-05-03  845  349  349 349   349
#3  PZU 7003-05-03  845  349  349 349   349
#4  PZU 7003-05-03  845  349  349 349   349
#5  PZU 7003-05-03  845  349  349 349   349
#6  PZU 7003-05-03  845  349  349 349   349
EN

回答 1

Stack Overflow用户

发布于 2014-04-02 21:19:47

您的日期格式不是as.Date()可识别的。首先,使用as.character()将它们转换为字符,然后通过as.Date()format参数指定正确的格式

代码语言:javascript
复制
as.Date(as.character(20100512),format="%Y%m%d")

或者,您可以通过转换为POSIXct来添加时间变量。按照上面的方式转换日期。取时间变量中的数百,乘以3600 (3600秒相当于一小时),然后相加。取余数,乘以60 (60秒等于1分钟),然后再次相加:

代码语言:javascript
复制
date.num <- 20100512
time.num <- 845
as.POSIXct(as.character(date.num),format="%Y%m%d") +
(time.num%/%100)*3600 +
(time.num%%100)*60

"2010-05-12 08:45:00 CEST"

看看?POSIXct,看看R可以用时间和日期做的所有有趣的事情。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22812634

复制
相关文章

相似问题

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