2013-10-28 29 views
0

我是R的新手,我一再被告知的一點是,實際上不需要for循環。我在申請中取得了一些成功,但在這種情況下無法弄清楚如何使用它。引用R中的其他單元而不使用for循環

這裏是我處理的數據:

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值的兩倍行。例如,Col 6中的第1行是3.08,它是2 * 1.54,位於第5列第4行。我想對第6行中的每個單元執行此操作,直到它在第12行中耗盡爲止。在第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 

謝謝。

回答

1

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

0

DF1是您的數據。我用sapply這裏應該是快於for loop

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

我懷疑這將是比for循環快。值得標杆。 – flodel

+0

但基於你的技巧,超範圍索引返回'NA',你可以做'df1 $ V6 < - df1 $ Price [seq_len(nrow(df1))+ 3]' – flodel