【发布时间】:2017-08-25 10:05:41
【问题描述】:
我在数据框中有数据序列,我想对序列中的第一个数字和每个连续数字执行百分比变化计算,这是在响应列中匹配 +1。它将第一个数字保存在数据中,并循环遍历每个数字,并使用数据列在第一个数字和每个连续数字之间取得百分比差异。当响应 = 0 时,百分比差异将停止。
response data output
1 0 98.92 0
2 0 99.92 0
3 0 101.12 0
4 0 101.24 0
5 1 100.96 0
6 1 101.76 0.00792393
7 1 101.96 0.009904913
8 1 101.88 0.00911252
9 1 101.8 0.008320127
10 1 101.6 0.006339144
11 1 101.08 0.00118859
12 1 101.28 0.003169572
13 1 101.76 0.00792393
14 1 105.2 0.04199683
15 1 105.72 0.047147385
16 1 106.00 0.049920761
17 1 105.96 0.049524564
18 1 106.2 0.051901743
19 1 105.12 0.041204437
20 1 106.00 0.049920761
21 1 106.18 0.051703645
22 1 106.56 0.055467512
23 1 107.16 0.06141046
24 1 106.53 0.055170365
25 1 105.6 0.045958796
26 1 106.00 0.049920761
27 1 105.44 0.04437401
28 1 105.6 0.045958796
29 1 104.84 0.038431062
30 0 104.68 0
31 0 105.12 0
32 0 105.68 0
33 0 106.28 0
34 0 106.32 0
35 0 107.04 0
36 1 107.04 0
37 1 106.8 -0.002242152
38 1 107.04 0
39 1 107.2 0.001494768
40 1 109.16 0.01980568
41 1 109.24 0.020553064
42 1 109.28 0.020926756
43 1 110.28 0.030269058
44 1 110.56 0.032884903
45 1 109.68 0.024663677
46 1 108.48 0.013452915
47 1 107.24 0.00186846
48 1 107.88 0.007847534
49 1 107.84 0.007473842
50 1 107.48 0.004110613
51 0 108.16 0
52 0 108.36 0
53 0 103.28 0
54 0 104.84 0
第 5 行的响应为 1,但是作为其序列中的第一个,没有计算百分比差异。接下来在第 6 行有一个 +1 作为响应,因此将采用 percent diff between data col, line 5 and 6。之后,我们转到第 7 行,它在data col, line 7 and 5 之间进行百分比差异。 data col, 8 and 5 etc... 之间的下一个百分比差异,直到响应为 0...在第 36 行的下一个序列之前它什么都不做。
以上是输出列中带有示例百分比差异的示例数据。
编辑:
我正在尝试这样做,创建一个获取百分比差异的函数...在 enter.long == 1 上记录第一个价格,然后针对第一个值执行百分比差异..
# Calculate % diff
train.set$pct.diff <- function(x){
d = diff(train.set$Close)
print(d)
for (j in 1:nrow(train.set)){
if (train.set$enter.long[j] == 1)
PCT[j]=d[j] / train.set$Close [j]
print(PCT)
}
return(PCT)
}
遇到0..需要关闭 仍在努力。
【问题讨论】:
-
您尝试过哪些不适合您的方法?
-
ave(df$data, df$response, FUN = function(x){(x - x[1]) / x[1]})?
标签: r