2016-05-22 26 views
0

の日付に基づいて、異なる長さの2つのデータフレーム上で動作:私は2つのデータフレームを持つR

DF1

Revenue EPS epsdate 
100  5 2016-01-14 
200  4 2016-04-14 

DF2

date   price 
2016-01-15  16 
2016-01-16  18 
2016-01-17  19 
2016-04-15  24 
2016-04-16  28 

私はベクトルところ価格を作成したいです以前に利用可能なepsで割られます。したがって:
2016-01-15,2016-01-16,2016-01-17価格は2016-01-14 EPSと
2016-04-15,2016-04-16の価格で割る必要がありますEPSは2016-04-14までに
両方のデータセットには多数の行が含まれています。

おかげで、事前

答えて

0

にあなたは価格とそのグループに基づいて、対応するEPSを両方のデータフレームにグループ変数を作成し、一致させるためにcut機能を使用することができます。具体的には、それはこのようなものが考えられます。

library(dplyr) 
df2$group <- as.integer(cut(df2$date, breaks = c(df1$epsdate, max(df2$date) + 1))) 
df1$group <- seq_along(df1$epsdate) 

adjPrice <- merge(df1, df2, by = "group") %>% mutate(newPrice = price/EPS) %>% 
      select(newPrice) %>% as.vector 
adjPrice 
    newPrice 
1  3.2 
2  3.6 
3  3.8 
4  6.0 
5  7.0 
+0

1行目には、両方のデータフレームの日付列はDateクラスであることを確認する必要があり –

+0

「xは数値でなければなりません」というエラーがスローされます。そうでなければ、 "df1 $ date < - as.Date(df1 $ date)"を使用して最初に変換します。それに対応して "epsdate"となるdf2についても同じことを確認してください。 – Psidom

関連する問題