如何添加具有特定计算的列并基于R中的图进行绘制?

问题描述 投票:0回答:1

例如,我有以下数据集:

timestamp  open    close    ID    
2000       1000    1100     5
2060       1100    1150     5
2120       1150    1200     5
2180       1200    1150     5
2240       1150    1100     8
2300       1100    1000     8
2360       1000    950      8
2420       950     900      8
2480       900     950      5
2540       950     1000     5
2600       1000    1050     5
2660       1050    1100     4
2720       1100    1150     4
2780       1150    1200     4

我如何添加另一个列来显示特定ID已显示多少次,Number_ID会显示该列?以及如何添加另一列,该列提供了从新ID开始时开始的百分比变化。第一次打开是ID的开始,我们使用关闭来计算%_change。所以这看起来像这样(因为不必包含计算,所以我添加了它,以便可以看到计算):

timestamp  open    close    ID   Number_ID    %_change  
2000       1000    1100     5    1            10 (because (1100-1000)*100/1000)
2060       1100    1150     5    2            15 (because (1150-1000)*100/1000)
2120       1150    1200     5    3            20 (because (1200-1000)*100/1000)
2180       1200    1150     5    4            15 (because (1150-1000)*100/1000)
2240       1150    1100     8    1            -4 (because (1100-1150)*100/1150)
2300       1100    1000     8    2            -13 (because (1000-1150)*100/1150)
2360       1000    950      8    3            -17 (because (950-1150)*100/1150)
2420       950     900      8    4            -21 (because (900-1150)*100/1150)
2480       900     950      5    1            5 (because (950-900)*100/900)
2540       950     1000     5    2            11 (because (1000-900)*100/900)
2600       1000    1050     5    3            16 (because 1050-900)*100/900)
2660       1050    1100     4    1            4 (because (1100-1050)*100/1050)
2720       1100    1150     4    2            9  (because (1150-1050)*100/1050)
2780       1150    1200     4    3            14 (because (1200-1050)*100/1050)

并且当拥有这两列时,如何制作一个图表,绘制每个ID的最大正负百分比变化?因此,我首先需要添加一个计算,以计算ID的openclose之间的价格差异百分比。看起来像这样:

timestamp  open    close    ID   Number_ID    %_change    %_change_opencloseID
2000       1000    1100     5    1            10          
2060       1100    1150     5    2            15 
2120       1150    1200     5    3            20 
2180       1200    1150     5    4            15          15 (because (1150-1000)*100/1000)
2240       1150    1100     8    1            -4 
2300       1100    1000     8    2            -13 
2360       1000    950      8    3            -17 
2420       950     900      8    4            -21         -21 (because (900-1150)*100/1150)
2480       900     950      5    1            5 
2540       950     1000     5    2            11 
2600       1000    1050     5    3            16           16 (because (1050-900)*100/900)
2660       1050    1100     4    1            4 
2720       1100    1150     4    2            9  
2780       1150    1200     4    3            14           14 (because (1200-1050)*100/1050)

[如果有了这个,我如何制作一个图表来自动绘制ID 5的16%变化而不是ID 5的15%变化? x轴为timestamp,y轴为%_change

谢谢!

r dataframe ggplot2 percentage
1个回答
0
投票

这是您第一步的方法:

library(dplyr)

df %>%
  group_by(ID) %>%
  mutate(Number_ID  = row_number(), 
         perc_change = (close - first(open))/first(open) * 100)


#  timestamp  open close    ID Number_ID perc_change
#       <int> <int> <int> <int>     <int>       <dbl>
# 1      2000  1000  1100     5         1       10   
# 2      2060  1100  1150     5         2       15   
# 3      2120  1150  1200     5         3       20   
# 4      2180  1200  1150     5         4       15   
# 5      2240  1150  1100     8         1       -4.35
# 6      2300  1100  1000     8         2      -13.0 
# 7      2360  1000   950     8         3      -17.4 
# 8      2420   950   900     8         4      -21.7 
# 9      2480   900   950     5         5       -5   
#10      2540   950  1000     5         6        0   
#11      2600  1000  1050     5         7        5   
#12      2660  1050  1100     4         1        4.76
#13      2720  1100  1150     4         2        9.52
#14      2780  1150  1200     4         3       14.3 
© www.soinside.com 2019 - 2024. All rights reserved.