【发布时间】:2018-05-31 03:13:28
【问题描述】:
我想合并两个包含单个股票时间序列的数据框,因此每列代表股票的信息。所以 Dataframe 1 有股票价格,Dataframe 2 有 P/E Ratios。我的目标是准备一个数据框,我可以将它与需要这种格式的数据框的包回测一起使用:
library('backtest')
data(starmine)
结构如下:
date PRICE symbol
date1 4.2 AAPL
date1 6.3 MSFT
date1 2.2 GE
date2 4.1 AAPL
date2 6.3 MSFT
date2 2.5 GE
因此数据集按月份分组。我的数据来自多个数据框,每个数据框都包含所有股票和所有日期的感兴趣变量(例如价格、市盈率等)。一个例子:
dates <- seq(as.Date("1995/1/1"), by = "month", length.out = 10)
a = sample(0:1,10,rep=TRUE)
b = sample(0:1,10,rep=TRUE)
c = sample(0:1,10,rep=TRUE)
prices = data.frame(dates,a,b,c)
a = sample(0:1,10,rep=TRUE)
b = sample(0:1,10,rep=TRUE)
c = sample(0:1,10,rep=TRUE)
pe = data.frame(dates,a,b,c)
谁能以某种方式合并 df1 和 df2 以获得与 starmine 中相同的结构?我想到了这样的事情:
> total <- merge(df1,df2,by=colnames)
Error in as.vector(x, mode) :
cannot coerce type 'closure' to vector of type 'any'
这是我想要得到的结构:
date price pe symbol
1995/1/1 4.2 0.5 a
1995/1/1 6.3 0.4 b
1995/1/1 2.2 0.3 c
1995/2/1 4.1 0.4 a
1995/2/1 6.3 0.2 b
1995/2/1 2.5 0.1 c
1995/3/1 4.2 0.5 a
1995/3/1 6.3 0.4 b
1995/3/1 2.2 0.3 c
1995/4/1 4.1 0.4 a
1995/4/1 6.3 0.2 b
1995/4/1 2.5 0.1 c
【问题讨论】:
-
id中的df2是什么? -
抱歉,这不应该在那里,之前尝试的错字。感谢您指出。我会修复它。
-
看起来你的问题是关于重塑而不是合并。也许我错过了一些东西。但是,您可以将
df1和df2中的每一个重新整形为具有starmine之类的格式,其中symbol列将具有a、b或c之类的值。那是你要的吗?如果没有,你能发布你期望的理想输出吗? -
试试
library(dplyr); library(tidyr); df1 %>% gather(symbol, price, -dates)看看这是否是您正在寻找的格式。 -
这听起来可行,但它是按库存分组的。所以它一次堆叠所有的股票。但我想按日期分组。我在上面发布了我想到的结构。