Написать функцию в R - вычислить значение из исторических записей и добавить к будущим записям - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть следующий набор данных

Name<-c('A','A','B','C','B','C','D','B','C','A','D','C','B','C','A','D','C','B','A','D','C','B')
Rate<-c(12,13,4,8,7,3,6,8,5,4,7,5,9,4,7,2,7,3,9,13,14,12)
Date<-c('1998-11-11', '1992-12-01','2010-06-17', '2001-10-3','2019-4-01', '2020-4-23','2021-2-01', '1995-12-01', 
        '1994-7-11', '2023-3-01','2022-06-17', '1982-10-3','1898-4-01', '2027-4-23','1927-2-01', '2028-12-01',
        '1993-5-21', '2013-2-09','2020-01-17', '1987-4-3','1881-5-01', '2024-5-23')
df<-cbind.data.frame(Name,Rate, Date)
df

   Name  Rate    Date
1     A   12 1998-11-11
2     A   13 1992-12-01
3     B    4 2010-06-17
4     C    8  2001-10-3
5     B    7  2019-4-01
6     C    3  2020-4-23
7     D    6  2021-2-01
8     B    8 1995-12-01
9     C    5  1994-7-11
10    A    4  2023-3-01
11    D    7 2006-06-17
12    C    5  1982-10-3
13    B    9  1898-4-01
14    C    4  2027-4-23
15    A    7  1927-2-01
16    D    2 2028-12-01
17    C    7  1993-5-21
18    B    3  2013-2-09
19    A    9 2020-01-17
20    D   13   1987-4-3
21    C   14  1881-5-01
22    B   12  2024-5-23

Я хочу написать функцию в R, чтобы сделать следующее: Найти стандартное отклонение для каждого типа Имени (A, B, C, D) историческогоданные.Историческими данными являются любые записи с датой <дек'2018.Будущие записи не будут использоваться для расчета SD для типа Имени.Затем я хочу добавить SD исторических данных к будущим тарифам соответствующего типа имени (A, B, C, D).Будущие тарифы с датой> дек'2018.Может ли кто-нибудь помочь мне написать эту функцию?

Ниже приведена функция, над которой я работаю

with(mutate(df,timediff = as.yearmon(Date) - as.yearmon(Sys.Date()) ), 
                         tapply(df$Rate, Name, function(x){
                           ifelse(timediff < 0 ,
                                  x + sd(x),
                                  x)
                         }, simplify=FALSE) )
...