仅以粗尺度比较精细和粗略时间序列

时间:2011-06-28 14:28:57

标签: r datetime time-series

我在data.frame中有两个R,每个都按日期编制索引。一个比另一个粗糙,我想仅在较粗略的时间尺度上比较数据。

更具体地说,一个data.frame有时间点DF1[a,b,c,...,x,y,z],另一个只有DF2[f,p,t],其中p=="July 19, 1917"。我希望将DF1[f,p,t]DF2[f,p,t]进行比较。

这不是语法,但我想做for each $i { DF_combined <- df1[$i] . df2[$i] if exists(df1[$i]); }。换句话说,创建一个仅包含每个共享观察日的新data.frame

我希望问题很清楚。我一直在寻找其他SO答案几个小时,但没有找到一个涵盖我正在尝试做的事情。提前谢谢。

2 个答案:

答案 0 :(得分:3)

合并您的data.frames,然后执行您想要的任何操作。

# assume the frequency of x > frequency of y (i.e. y is "coarse")
merge(x, y, by="row.names", all.y=TRUE)  # dates are in row.names
merge(x, y, by="date", all.y=TRUE)       # dates are in "date" column

由于你有时间序列,我建议你使用时间序列类而不是data.frame。我推荐xts / zoo。以下是使用xts执行此操作的方法:

merge(x, y, join="right")

答案 1 :(得分:1)

这是我的问题的解决方案,从开始到结束。

问题:根据我的经纪人的记录(时间间隔不均匀),将我的净值的时间序列放在S&amp; P的时间序列旁边,以便在{{1 }}

<强>答案

R

请注意,日期上没有标题。这是因为时间序列数据类型将时间值嵌入为排序索引。 (#get S&P data require(quantmod) getSymbols("^GSPC", from="2004-01-01", src="yahoo") head(GSPC) GSPC.Open GSPC.High GSPC.Low GSPC.Close GSPC.Volume GSPC.Adjusted 2004-01-02 1111.92 1118.85 1105.08 1108.48 1153200000 1108.48 2004-01-05 1108.48 1122.22 1108.48 1122.22 1578200000 1122.22 2004-01-06 1122.22 1124.46 1118.44 1123.67 1494500000 1123.67 = class(GSPC)其中[1] "xts" "zoo"是完全按索引排序的数据类型,zoo是一个时间序列数据类型,可以容忍超过限制性原生xts 1}}数据类型容忍。)

ts

#coerce the .csv from my broker into a time-series data type as well MyNetWorth <- read.csv("/home/joey/Desktop/Historical_NAV.csv") require(xts) MyNetWorth <- as.xts( MyNetWorth, order.by= as.Date(MyNetWorth$TradeDate, format="%m/%d/%Y") ) 之日,format('87)和%Y(1987)以及%y - 月和{{之间存在很大差异1}} - 分钟。我的经纪人写了10/23/2009。

我做得对吗?

%m

Yessss。

最后,@Joshua Ulrich的建议实现了我想要的那种合并:

%M

> class(MyNetWorth) [1] "xts" "zoo" 只比较粗略的比较日期(我的数据总是比雅虎更粗)。

最后,绘制结果:

comparison <- merge(GSPC$GSPC.Adjusted, MyNetWorth$NetAssets, join="right")

非常感谢所有编写所有这些开源软件的人 - 尤其是那些写过小插曲的人!