2017-12-17 8 views
0

개별 주식에 대한 시계열을 포함하는 두 개의 데이터 프레임을 병합하고자하므로 각 열은 주식에 대한 정보를 나타냅니다. 따라서 Dataframe 1에는 주가가 있고 Dataframe 2에는 P/E Ratio가 있습니다.백 테스팅을 위해 두 개의 데이터 프레임을 병합

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 

그래서 데이터 집합으로 그룹화 내 목표는이 형식의 dataframe을 필요로 내가 패키지 backtest와 함께 사용할 수있는 dataframe을 준비하는 것입니다 개월. 내 데이터는 모든 주식 및 모든 날짜의 관심 변수 (예 : 가격, 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)  

수 있습니까 starmine과 같은 구조를 얻을 수있는 방법으로 DF1 및 DF2를 병합 할 수있는 방법 누구? 나는 이런 식의 생각 :

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'은 컬럼'symbol'이'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))을 사용하고 있습니다 :

> total <- merge(df1,df2,by=colnames) 
Error in as.vector(x, mode) : 
cannot coerce type 'closure' to vector of type 'any' 

이 내가 얻을하고자하는 구조입니다. tbl_df()이 필요하지 않으므로 대신 rbind(prices, pe)을 사용할 수 있습니다.

+1

예! 그게 완벽 해, 정말 고마워 !!! 빠른 도움에 감사드립니다 !! –