特定行号的标准偏差,并将值放在 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])
}
但同样,这绝对不是最有效的方法。
我有以下数据:
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])
}
但同样,这绝对不是最有效的方法。