首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个包含NAs值的EURUSD价格表

创建一个包含NAs值的EURUSD价格表
EN

Stack Overflow用户
提问于 2015-10-03 22:39:01
回答 1查看 52关注 0票数 1

我有一个包含以下数据的表:

代码语言:javascript
复制
head(EURUSD0)
                 Date   Open   High    Low  Close
1 2005-05-02 00:00:00 1.2861 1.2861 1.2861 1.2861
2 2005-05-02 00:04:00 1.2860 1.2860 1.2860 1.2860
3 2005-05-02 00:10:00 1.2861 1.2861 1.2861 1.2861
4 2005-05-02 00:11:00 1.2860 1.2860 1.2860 1.2860
5 2005-05-02 00:12:00 1.2861 1.2861 1.2861 1.2861
6 2005-05-02 00:13:00 1.2862 1.2862 1.2861 1.2861

日期定义为POSIXlt:

代码语言:javascript
复制
EURUSD0$Date <- as.POSIXlt(EURUSD0[,1],format = '%Y.%m.%d %H:%M')

我创建一个空数据框,如下所示:

代码语言:javascript
复制
startDate = EURUSD0$Date[1]
endDate = EURUSD0$Date[nrow(EURUSD0)]
dateSeq1min = as.POSIXlt(seq(from=startDate, to=endDate, by="1 min"))
EURUSD <- data.frame(Date=dateSeq1min,
               Open=rep(NA,N),
               High=rep(NA,N),
               Low=rep(NA,N),
               Close=rep(NA,N),
               stringsAsFactors=FALSE) 

那是,

代码语言:javascript
复制
head(EURUSD)
                 Date Open High Low Close
1 2005-05-02 00:00:00   NA   NA  NA    NA
2 2005-05-02 00:01:00   NA   NA  NA    NA
3 2005-05-02 00:02:00   NA   NA  NA    NA
4 2005-05-02 00:03:00   NA   NA  NA    NA
5 2005-05-02 00:04:00   NA   NA  NA    NA
6 2005-05-02 00:05:00   NA   NA  NA    NA

我想用我在EURUSD0中拥有的信息填充这个数据框。请注意,在欧元兑美元中每分钟都会出现一次,而在EURUSD0中则不会。

我可以通过使用这个想法来实现:

代码语言:javascript
复制
> (EURUSD0$Date[1] == EURUSD$Date)[1:10]
 [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> (EURUSD0$Date[2] == EURUSD$Date)[1:10]
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

但我有很多数据,而且非常昂贵。

有任何想法/提示如何继续(以一种不昂贵的方式)?

EN

回答 1

Stack Overflow用户

发布于 2015-10-03 23:10:01

一种使用merge的解决方案

代码语言:javascript
复制
merge(EURUSD[1], EURUSD0, by="Date", all.x=T)
                 Date   Open   High    Low  Close
1 2005-05-02 00:00:00 1.2861 1.2861 1.2861 1.2861
2 2005-05-02 00:01:00     NA     NA     NA     NA
3 2005-05-02 00:02:00     NA     NA     NA     NA
4 2005-05-02 00:03:00     NA     NA     NA     NA
5 2005-05-02 00:04:00 1.2860 1.2860 1.2860 1.2860
6 2005-05-02 00:05:00     NA     NA     NA     NA

使用这种方法,一个包含时间值的简单数据框就足够了:EURUSD <- data.frame(Date=dateSeq1min)

更新

来自?POSIXct的文档

"POSIXct“更便于包含在数据帧中,而"POSIXlt”更接近人类可读的形式。

当我们尝试合并不同类的数据时,我们必须小心,因为合并不会完全匹配。在本例中,您试图将具有类"POSIXlt“的第一个数据帧与第二个数据帧"POSIXct”合并。它们并不完全匹配,因为时区不同。

为什么是POSIXct?因为它是在创建数据帧时被强制到该类的。

为了解释记录的行为,我们可以将第一个数据帧转换为"POSIXct“进行匹配,然后执行合并:

代码语言:javascript
复制
EURUSD0$Date <- as.POSIXct(EURUSD0$Date)
merge(EURUSD[1], EURUSD0, by="Date", all.x=T)
#                  Date   Open   High    Low  Close
# 1 2005-05-02 00:00:00 1.2861 1.2861 1.2861 1.2861
# 2 2005-05-02 00:01:00     NA     NA     NA     NA
# 3 2005-05-02 00:02:00     NA     NA     NA     NA
# 4 2005-05-02 00:03:00     NA     NA     NA     NA
# 5 2005-05-02 00:04:00 1.2860 1.2860 1.2860 1.2860
# 6 2005-05-02 00:05:00     NA     NA     NA     NA
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32923772

复制
相关文章

相似问题

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