合并两个时间序列和一个数据帧来计算值

时间:2015-01-16 12:05:26

标签: r

我有2个动物园时间序列对象和一个基础数据框。我正在尝试使用这些功能。

library("zoo")

z1就是

z1 <- structure(c(400L, 125L, 125L, 125L, 120L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L), .Dim = c(5L, 3L), .Dimnames = list(NULL, c("MSFT", "MSFTCALL44", "MSFTPUT44"
)), index = structure(c(15723, 15725, 15726, 15727, 15728), class = "Date"), 
class = "zoo")


           MSFT MSFTCALL44 MSFTPUT44
2013-01-18  400          0         0
2013-01-20  125          0         0
2013-01-21  125          0         0
2013-01-22  125          0         0
2013-01-23  120          0         0

z2是

z2 <- structure(c(0.04, 0.02, 0.03, 0.02, 0.03, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L), .Dim = c(5L, 3L), .Dimnames = list(NULL, c("MSFT", "MSFTCALL44", "MSFTPUT44"
)), index = structure(c(15723, 15725, 15726, 15727, 15728), class = "Date"), 
class = "zoo")


          MSFT MSFTCALL44 MSFTPUT44
2013-01-18 0.04          0         0
2013-01-20 0.02          0         0
2013-01-21 0.03          0         0
2013-01-22 0.02          0         0
2013-01-23 0.03          0         0

df是

l <- "Symbol, Underlying, TimeToMaturity, CP, Strike
        MSFTCALL44, MSFT, 0.1, call,44
        MSFTPUT55, MSFT, 0.1, put,44"

i <- read.csv(text = l)

      Symbol Underlying TimeToMaturity    CP Strike
1 MSFTCALL44       MSFT            0.1  call     44
2  MSFTPUT55       MSFT            0.1   put     44

我想在每个单元格中应用此公式

z1 []&lt; - apply(MyFunc(df $ CP,df $ Underlying,df $ Strike,df $ maturity,z2 [match for symbol]))

更新
我相信使用rollapply或apply会完成任务,但我是R的新手,并且对两个不同的动物园对象和数据框架上的rollapply也不熟悉。

输出:

           MSFT         MSFTCALL44                     MSFTPUT44
2013-01-18  400          MyFunc(400,"call",0.04,44)         MyFunc(400,"put",0.04,44)
2013-01-20  125          MyFunc(125,"call",0.02,44)         MyFunc(125,"put",0.02,44)
2013-01-21  125          MyFunc(125,"call",0.03,44)         MyFunc(125,"put",0.03,44)
2013-01-22  125          MyFunc(125,"call",0.02,44)         MyFunc(125,"put",0.02,44)
2013-01-23  120          MyFunc(120,"call",0.03,44)         MyFunc(120,"put",0.03,44)

像这样。

0 个答案:

没有答案