0

我是 R 新手,我一再被告知的一件事是确实不需要 for 循环。我在 apply 方面取得了一些成功,但无法弄清楚如何在这种情况下使用它。

这是我正在使用的数据:

Bid  Ask     Exp Strike Price   V6
51 4.95 5.15 NOV1 13    335 5.050 3.08
52 3.40 3.50 NOV1 13    340 3.450   NA
53 2.28 2.42 NOV1 13    345 2.350   NA
54 1.51 1.57 NOV1 13    350 1.540   NA
55 0.99 1.07 NOV1 13    355 1.030   NA
56 0.66 0.71 NOV1 13    360 0.685   NA
57 0.46 0.51 NOV1 13    365 0.485   NA
58 0.33 0.37 NOV1 13    370 0.350   NA
59 0.25 0.28 NOV1 13    375 0.265   NA
60 0.18 0.24 NOV1 13    380 0.210   NA
61 0.11 0.20 NOV1 13    385 0.155   NA
62 0.05 0.17 NOV1 13    390 0.110   NA
63 0.05 0.16 NOV1 13    395 0.105   NA
64 0.07 0.13 NOV1 13    400 0.100   NA

在第 6 列(称为 V6)中,我希望值是当前行下方 3 的单元格中价格列中值的两倍。例如,第 6 列中的第 1 行是 3.08,即第 5 列第 4 行中的 2*1.54。我想对第 6 行中的每个单元格执行此操作,直到它在第 12 行中用完。NA 在第 6 列中很好在这一行之后。

这是我如何做到这一点的:

for (i in 1:11){ 
data[i,6] <- 2*data[i+3,5]}

有没有更快/更容易/更合适的方法来做到这一点?

这是我想要的最终数据。

    Bid  Ask     Exp Strike Price   V6
51 4.95 5.15 NOV1 13    335 5.050 3.08
52 3.40 3.50 NOV1 13    340 3.450 2.06
53 2.28 2.42 NOV1 13    345 2.350 1.37
54 1.51 1.57 NOV1 13    350 1.540 0.97
55 0.99 1.07 NOV1 13    355 1.030 0.70
56 0.66 0.71 NOV1 13    360 0.685 0.53
57 0.46 0.51 NOV1 13    365 0.485 0.42
58 0.33 0.37 NOV1 13    370 0.350 0.31
59 0.25 0.28 NOV1 13    375 0.265 0.22
60 0.18 0.24 NOV1 13    380 0.210 0.21
61 0.11 0.20 NOV1 13    385 0.155 0.20
62 0.05 0.17 NOV1 13    390 0.110   NA
63 0.05 0.16 NOV1 13    395 0.105   NA
64 0.07 0.13 NOV1 13    400 0.100   NA

谢谢你。

4

2 回答 2

1

利用 mydata$V6 <- 2 * c(mydata$Price[-(1:3)], rep(NA, 3))

于 2013-10-28T00:41:44.520 回答
0

df1 是您的数据。我sapply在这里使用的应该比for loop

df1$V6<-sapply(1:nrow(df1),function(x) 2*df1[x+3,5])
于 2013-10-28T00:43:30.760 回答