特定行号的标准偏差,并将值放在 R 中的另一行和列中

standard deviation of specific row numbers and put the value in another row & column in 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 中提出类似的建议,那将非常有帮助。

谢谢。

请原谅我英语不好。如果您需要更多详细信息或示例,请在评论中告诉我。

对于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 将 运行 通过选定的行,随后的函数将重复计算选定行的标准差。我将 NA 添加到此输出,以便可以将其添加到 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)

绝对不是最有效的方法,但可能对你来说足够了(x 表示你的数据框):

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

但同样,这绝对不是最有效的方法。