2017-12-17 11 views
0

個々の株の時系列を含む2つのデータフレームを結合したいので、各列は株に関する情報を表します。したがって、データフレーム1には株価があり、データフレーム2にはP/Eレシオがあります。私の目標は、私はこのフォーマットのデータフレームを必要とするパッケージのバックテストで使用できるデータフレームを準備することです:バックテスト用に2つのデータフレームを結合する

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 

ので、データセットが別にグループ化されます。このような構造を有している

library('backtest') 
data(starmine) 

月。私のデータは、すべての株式とすべての日付について、関心のある変数(価格、PE比率など)をそれぞれ含む複数のデータフレームに入っています。例:

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をマージすることができますどのように誰ですか?私はこのような何かを考えた:

> 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 
+1

'df2'の' id'とは何ですか? – AntoniosK

+1

申し訳ありませんが、前の試行のタイプミスです。それを指摘してくれてありがとう。私はそれを修正するつもりです。 –

+0

あなたの質問のように見えるのは、再形成し、マージしないことです。たぶん私は何かが欠けているでしょう。しかし、 'df1'と' df2'のそれぞれの形を 'starmine'のような形に変形することができます。' starmine'は 'a'、' b'、 'c'のような値を持ちます。それはあなたが欲しいものですか?そうでない場合は、あなたの理想的な出力がどのようになると思いますか? – AntoniosK

答えて

1
# example data 
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)  

library(dplyr) 
library(tidyr) 

# add dataset name as a column 
prices$name = "price" 
pe$name = "pe" 

tbl_df(rbind(prices, pe)) %>% 
    gather(symbol, value, -dates, -name) %>% 
    spread(name, value) 

# # A tibble: 30 x 4 
#  dates symbol pe price 
# *  <date> <chr> <int> <int> 
# 1 1995-01-01  a  1  0 
# 2 1995-01-01  b  0  1 
# 3 1995-01-01  c  0  0 
# 4 1995-02-01  a  0  0 
# 5 1995-02-01  b  0  1 
# 6 1995-02-01  c  0  1 
# 7 1995-03-01  a  0  0 
# 8 1995-03-01  b  1  0 
# 9 1995-03-01  c  0  0 
# 10 1995-04-01  a  0  1 
# # ... with 20 more rows 

私は唯一の視覚化のためにtbl_df(rbind(prices, pe))を使用しています。あなたは本当にtbl_df()を必要としないので、代わりにrbind(prices, pe)を使うことができます。

+1

はい!それは完璧です、ありがとう!私は迅速な助けを感謝します! –

関連する問題