参考R中的其他单元而不使用for循环

时间:2013-10-28 00:34:20

标签: r for-loop apply

我是R的新手,有一件事我一次又一次被告知,确实没有必要进行循环。我在申请方面取得了一些成功,但在这个例子中无法弄清楚如何使用它。

以下是我正在使用的数据:

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的单元格中price列中的值的两倍。例如,Col 6中的第1行是3.08,它是2 * 1.54,位于第5行第4行。我想对第6行中的每个单元格执行此操作,直到它在第12行中用完为止。在第6列中,NA很好在这一行之后。

以下是我完成此操作的方法:

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

更快
df1$V6<-sapply(1:nrow(df1),function(x) 2*df1[x+3,5])