Как рассчитать данные прокатки 13 месяцев назад - PullRequest
1 голос
/ 24 июня 2019

Я хочу взять данные за 13 месяцев и присвоить их в другом столбце.

Я хочу узнать значение Актива за самый старый период за каждые 13 месяцев.Код, который я использую в настоящее время, находит min(Assets) для скользящего 13-месячного периода.Вместо этого я хочу актив самого старого месяца.Любая помощь в этом очень ценится.поэтому в этом примере для Group__C == E и period == 6/1/2018 я хочу, чтобы Month13Asset показывал 22175.618 вместо 21059.052.

x <- x %>% 
  arrange(Group__c, Fund, Period) %>% 
  group_by(Group__c, Fund) %>% 
  mutate(Month13Asset=RcppRoll::roll_min(x=Assets,13, align="right", fill=NA))

# Group__c          Fund    Period  Assets  Month13Asset
# A   FundA 8/1/2018    0   NA
# B   FundA 8/1/2018    0   NA
# D FundA   8/1/2018    0   NA
# D FundA   9/1/2018    6973.97 NA
# D FundA   10/1/2018   6870.799    NA
# D FundA   11/1/2018   6132.729    NA
# D FundA   12/1/2018   6347.007    NA
# D FundA   1/1/2019    5664.626    NA
# D FundA   2/1/2019    6292.03 NA
# D FundA   3/1/2019    6705.801    NA
# D FundA   4/1/2019    6802.498    NA
# D FundA   5/1/2019    7056.608    NA
# E FundA   6/1/2017    22175.618   NA
# E FundA   7/1/2017    21263.086   NA
# E FundA   8/1/2017    21207.543   NA
# E FundA   9/1/2017    21059.052   NA
# E FundA   10/1/2017   21505.484   NA
# E FundA   11/1/2017   22293.494   NA
# E FundA   12/1/2017   22938.228   NA
# E FundA   1/1/2018    23104.586   NA
# E FundA   2/1/2018    23296.339   NA
# E FundA   3/1/2018    21539.104   NA
# E FundA   4/1/2018    24010.93    NA
# E FundA   5/1/2018    23965.739   NA
# E FundA   6/1/2018    24944.856   21059.052
# E FundA   7/1/2018    24944.856   21059.052
# E FundA   8/1/2018    25562.452   21059.052

1 Ответ

0 голосов
/ 25 июня 2019

Tidyverse: я сместил данные Assets на 12 строк, используя dplyr::lag(), и добавил их во фрейм данных после группировки, используя dplyr::do().Это будет работать только в том случае, если ваши данные распределены равномерно и отсутствуют пропущенные месяцы.

library(dplyr)
library(lubridate)

x %>% 
  mutate(Period = mdy(Period)) %>%
  arrange(Group__c, Fund, Period) %>% 
  group_by(Group__c, Fund) %>% 
  do(
    mutate(., Month13Asset = lag(.$Assets, 12))
  )

   Group__c  Fund     Period    Assets Month13Asset
1         A FundA 2018-08-01     0.000           NA
2         B FundA 2018-08-01     0.000           NA
3         D FundA 2018-08-01     0.000           NA
4         D FundA 2018-09-01  6973.970           NA
5         D FundA 2018-10-01  6870.799           NA
6         D FundA 2018-11-01  6132.729           NA
7         D FundA 2018-12-01  6347.007           NA
8         D FundA 2019-01-01  5664.626           NA
9         D FundA 2019-02-01  6292.030           NA
10        D FundA 2019-03-01  6705.801           NA
11        D FundA 2019-04-01  6802.498           NA
12        D FundA 2019-05-01  7056.608           NA
13        E FundA 2017-06-01 22175.618           NA
14        E FundA 2017-07-01 21263.086           NA
15        E FundA 2017-08-01 21207.543           NA
16        E FundA 2017-09-01 21059.052           NA
17        E FundA 2017-10-01 21505.484           NA
18        E FundA 2017-11-01 22293.494           NA
19        E FundA 2017-12-01 22938.228           NA
20        E FundA 2018-01-01 23104.586           NA
21        E FundA 2018-02-01 23296.339           NA
22        E FundA 2018-03-01 21539.104           NA
23        E FundA 2018-04-01 24010.930           NA
24        E FundA 2018-05-01 23965.739           NA
25        E FundA 2018-06-01 24944.856     22175.62
26        E FundA 2018-07-01 24944.856     21263.09
27        E FundA 2018-08-01 25562.452     21207.54
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...