Как добавить столбцы с конкретными расчетами и построить график на основе этого в R? - PullRequest
0 голосов
/ 17 апреля 2020

Скажем, например, у меня есть следующий набор данных:

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

Как я могу добавить еще один столбец, который показывает, сколько раз конкретный идентификатор был показан, это показано Number_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)

И когда есть эти 2 столбца, как я могу сделать график какие графики показывают наибольшие положительные и отрицательные% изменения на ID? Итак, мне сначала нужно добавить расчет, который рассчитывает разницу в процентах между open и close идентификатора. Это будет выглядеть примерно так:

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)

Если у меня есть это, как я могу сделать график, который отображает изменение 16% для идентификатора 5, а не изменение 15% для идентификатора 5 автоматически? С timestamp на оси X и %_change на оси Y.

Спасибо!

1 Ответ

1 голос
/ 17 апреля 2020

Вот как вы можете сделать свой первый шаг:

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 

В data.table:

library(data.table)
setDT(df)[, c("Number_ID", "perc_change") := list(seq_len(.N), 
           (close - first(open))/first(open) * 100), ID]
...