SMA для нескольких элементов в одном столбце - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь создать формулу SMA для нескольких элементов в одном столбце. Вот пример данных, с которыми я работаю.

 Person  Time Value
   <chr>  <dbl> <dbl>
 1 A          1    14
 2 A          2    13
 3 A          3    17
 4 A          4     9
 5 A          5    20
 6 A          6     5
 7 B          1    17
 8 B          2    11
 9 B          3    18
10 B          4    10
11 B          5    10
12 B          6    20
13 C          1     5
14 C          2     5
15 C          3    11
16 C          4    12
17 C          5    12
18 C          6     9

Что я хотел бы сделать, так это создать еще один столбец с формулой SMA для каждого человека (A, B, C и т. Д.). В этом случае, скажем, SMA2. Хотя это работает для персоны A, я не могу заставить формулу перезапуститься на персоне B. Скорее первое значение SMA2 персоны B содержит значения персоны A.

Прямо сейчас я использовал это, которое дает мне SMA, которую я хочу, но не перезапускается при каждом новом человеке:

DataSet$SMA2<-SMA(DataSet$Value, 2)

Любая помощь будет оценена.

DataSet <- DataSet %>%
  group_by(Person) %>%
  mutate(sma2 = TTR::SMA(Value,2))

Еще придумали это:

# A tibble: 18 x 4
# Groups:   Person [3]
   Person  Time Value  sma2
   <chr>  <dbl> <dbl> <dbl>
 1 A          1    14  NA  
 2 A          2    13  13.5
 3 A          3    17  15  
 4 A          4     9  13  
 5 A          5    20  14.5
 6 A          6     5  12.5
 7 B          1    17  11  
 8 B          2    11  14  
 9 B          3    18  14.5
10 B          4    10  14  
11 B          5    10  10  
12 B          6    20  15  
13 C          1     5  12.5
14 C          2     5   5  
15 C          3    11   8  
16 C          4    12  11.5
17 C          5    12  12  
18 C          6     9  10.5

1 Ответ

0 голосов
/ 12 января 2019

Используя dplyr, group_by person, затем используйте mutate. Это сбросит расчеты на человека.

DataSet <- DataSet %>% 
  group_by(Person) %>% 
  mutate(sma2 = TTR::SMA(Value, 2))

# A tibble: 18 x 4
# Groups:   Person [3]
   Person  Time Value  sma2
   <chr>  <int> <int> <dbl>
 1 A          1    14  NA  
 2 A          2    13  13.5
 3 A          3    17  15  
 4 A          4     9  13  
 5 A          5    20  14.5
 6 A          6     5  12.5
 7 B          1    17  NA  
 8 B          2    11  14  
 9 B          3    18  14.5
10 B          4    10  14  
11 B          5    10  10  
12 B          6    20  15  
13 C          1     5  NA  
14 C          2     5   5  
15 C          3    11   8  
16 C          4    12  11.5
17 C          5    12  12  
18 C          6     9  10.5
...