我有一个包含以下数据的表:
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:
EURUSD0$Date <- as.POSIXlt(EURUSD0[,1],format = '%Y.%m.%d %H:%M')我创建一个空数据框,如下所示:
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) 那是,
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中则不会。
我可以通过使用这个想法来实现:
> (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但我有很多数据,而且非常昂贵。
有任何想法/提示如何继续(以一种不昂贵的方式)?
发布于 2015-10-03 23:10:01
一种使用merge的解决方案
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“进行匹配,然后执行合并:
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 NAhttps://stackoverflow.com/questions/32923772
复制相似问题