2016-07-07 34 views
0

我具有以下數據:標準偏差,並把值在另一行和列中的R

Date     Value   Std.Dev 
11/30/2015 10:00  0 
11/30/2015 10:30 -0.002400962  
11/30/2015 11:00 -0.004819286  
11/30/2015 11:30 -0.000805477  
11/30/2015 12:00 -0.001612904  
11/30/2015 12:30 -0.003233633  
11/30/2015 13:00  0.000809389  
11/30/2015 13:30  0.005647453  
11/30/2015 14:00 -0.002416433  
11/30/2015 14:30 -0.006472515  
11/30/2015 15:00 -0.002438035  
11/30/2015 15:30  0 
11/30/2015 16:30 -0.000814001  
12/1/2015 9:00  0.006493529 0.002931114 
12/1/2015 9:30  -0.001619434 0.003657839 
12/1/2015 10:00  -0.003246756 0.00363798 
12/1/2015 10:30  -0.002442004 0.003519869 
12/1/2015 11:00  0.000814664 0.003551266 
12/1/2015 11:30  -0.001629992 0.00357286 
12/1/2015 12:00  0.000815328 0.003504601 
12/1/2015 12:30  -1.11022E-16 0.003504796 
12/1/2015 13:00  -0.000815328 0.002981979 

Std.Dev應從row number 14開始計算。因爲我正在計算前一天的第一個std.dev值。並且standard deviation for row 14將在價值的row=1上計算爲價值的row=13。因此它應該繼續。所以Std.Dev_at_row_number_15 = STDEV(Value2:Value14)Std.Dev_at_row_number_16 = STDEV(Value3:Value15)。依此類推......

您可以在R中爲這種計算建議任何函數。在excel中它很容易。但是如果你可以在R中建議類似的話,這將會非常有幫助。

謝謝。

請原諒我英文不好,如果有的話。如果您想了解更多詳情或示例,請在評論中告知我。

回答

1

絕對不是最有效的方式,但對你也許足夠了(其中x表示您的數據幀):

for(counter in 14:nrow(x)){ 
     x[counter,3] <- sd(x[(counter-13):(counter-1),2]) 
    } 

但同樣,這絕對不是最有效的方式。

+0

將是sd而不是std? – Zico

+0

是的,Sry是一個錯誤 – BJPrim

0

對於data.frame,DF,你可以得到這個與sapply如下:

df$st.dev <- c(rep(NA, 13), sapply(13:(nrow(df)-1), function(i) sd(df$Value[(i-12):i]))) 

sapply將通過選擇行和隨後將重複計算標準偏差選定行中的功能運行。我在這個輸出上添加了NAs,以便將它添加到data.frame中。

數據

我騙一點在數據讀取,但它不會影響結果。

df <- read.table(header=T, text="Date Time  Value   
11/30/2015 10:00  0 
11/30/2015 10:30 -0.002400962  
11/30/2015 11:00 -0.004819286  
11/30/2015 11:30 -0.000805477  
11/30/2015 12:00 -0.001612904  
11/30/2015 12:30 -0.003233633  
11/30/2015 13:00  0.000809389  
11/30/2015 13:30  0.005647453  
11/30/2015 14:00 -0.002416433  
11/30/2015 14:30 -0.006472515  
11/30/2015 15:00 -0.002438035  
11/30/2015 15:30  0 
11/30/2015 16:30 -0.000814001  
12/1/2015 9:00  0.006493529 
12/1/2015 9:30  -0.001619434 
12/1/2015 10:00  -0.003246756 
12/1/2015 10:30  -0.002442004 
12/1/2015 11:00  0.000814664 
12/1/2015 11:30  -0.001629992 
12/1/2015 12:00  0.000815328 
12/1/2015 12:30  -1.11022E-16 
12/1/2015 13:00  -0.000815328", as.is=TRUE, row) 
+0

它給我的原始數據的錯誤:替換有23行,數據有22個。 – Zico

+0

我剛修復它。 'sapply'中有太多迭代。 – lmo