我有一个矩阵,它是QuantLib包中的EuropeanOptionArrays函数的输出。这是结构:
num [1:61, 1:33] 0.0109 0.0154 0.0215 0.0298 0.0409 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:61] "600" "605" "610" "615" ...
..$ : chr [1:33] "0.128767123287671" "0.124798869319417" "0.12083061535116..
我想创建一个2013 x 3
数据框而不是上面的数据框。我希望它看起来像这样:
Strike Price Time to Maturity Option Value
650 .1287
650 .1247
650 .1208
650 .1168
... ... ....
而不是现在看起来选项值不是向量的方式:
0.1287 0.1247 0.1208 .1168...
600 0.01089619 0.009433598 0.006943248 0.005897702
605 0.01539911 0.013421805 0.010021222 0.008577718
610 0.02153793 0.018894224 0.014303551 0.012334122
615 0.02982046 0.026323863 0.020195542 0.017539548
620 0.04088268 0.036306751 0.028214722 0.024673190
625 0.05551221 0.049585461 0.039014121 0.034343843
...
这有一个简单的解决方案吗?
由于
答案 0 :(得分:0)
如果矩阵为mat
,您可以选择以下两者之一:
dat1 <- cbind(expand.grid(Strike_Price = as.numeric(rownames(mat)),
Time_to_Maturity = as.numeric(colnames(mat))),
Option_Value = as.numeric(mat))
dat2 <- cbind(expand.grid(Time_to_Maturity = as.numeric(colnames(mat)),
Strike_Price = as.numeric(rownames(mat))),
Option_Value = as.numeric(t(mat)))
示例强>
set.seed(0)
mat <- matrix(rnorm(12), 3, 4)
rownames(mat) <- 1:3
colnames(mat) <- 11:14
# 11 12 13 14
#1 1.2629543 1.2724293 -0.928567035 2.4046534
#2 -0.3262334 0.4146414 -0.294720447 0.7635935
#3 1.3297993 -1.5399500 -0.005767173 -0.7990092
我的代码给出了:
## dat1
# Strike_Price Time_to_Maturity Option_Value
#1 1 11 1.262954285
#2 2 11 -0.326233361
#3 3 11 1.329799263
#4 1 12 1.272429321
#5 2 12 0.414641434
#6 3 12 -1.539950042
#7 1 13 -0.928567035
#8 2 13 -0.294720447
#9 3 13 -0.005767173
#10 1 14 2.404653389
#11 2 14 0.763593461
#12 3 14 -0.799009249
## dat2
# Time_to_Maturity Strike_Price Option_Value
#1 11 1 1.262954285
#2 12 1 1.272429321
#3 13 1 -0.928567035
#4 14 1 2.404653389
#5 11 2 -0.326233361
#6 12 2 0.414641434
#7 13 2 -0.294720447
#8 14 2 0.763593461
#9 11 3 1.329799263
#10 12 3 -1.539950042
#11 13 3 -0.005767173
#12 14 3 -0.799009249
正如我在评论中所说,我不确定你为什么要在这里提供数据框。我认为矩阵非常适合制作3D绘图。例如:
Strike_Price <- as.numeric(rownames(mat))
Time_to_Maturity <- as.numeric(colnames(mat))
persp(Strike_Price, Time_to_Maturity, mat)
##image(Strike_Price, Time_to_Maturity, mat)
##contour(Strike_Price, Time_to_Maturity, mat)