Заполните пробелы из предыдущей ячейки, умноженной на текущую ячейку в другом столбце в R - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть следующие данные:

year<-c(2015:2030)
actual<-c(NA,NA,NA,3170.620936,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA)
delta<-c(0.276674282,
         0.23515258,
         0.133083622,
         0.236098022,
         0.399974342,
         0.385942573,
         0.165095681,
         0.163945346,
         0.155695778,
         0.147270755,
         0.146505261,
         0.133997582,
         0.123100693,
         0.119131947,
         0.115589755,
         0.103675414)

df<-cbind.data.frame(year,actual,delta)
df

   year   actual     delta
1  2015       NA 0.2766743
2  2016       NA 0.2351526
3  2017       NA 0.1330836
4  2018 3170.621 0.2360980
5  2019       NA 0.3999743
6  2020       NA 0.3859426
7  2021       NA 0.1650957
8  2022       NA 0.1639453
9  2023       NA 0.1556958
10 2024       NA 0.1472708
11 2025       NA 0.1465053
12 2026       NA 0.1339976
13 2027       NA 0.1231007
14 2028       NA 0.1191319
15 2029       NA 0.1155898
16 2030       NA 0.1036754

Я пытаюсь заменить NA после последней действительной точки данных, умноженной на текущую дельту. Итак, в этом случае я хочу умножить «фактическое» в 2016 году на «дельта» в 2017 году и заполнить значение 2017 года для «фактического». Я пробовал приведенный ниже код, но безуспешно:

df$actual_filled<-df$actual
df

library(dplyr)
df<-df%>%
  mutate( actual_filled=lag(actual_filled,1)*delta)
df

   year   actual     delta actual_filled
1  2015       NA 0.2766743            NA
2  2016       NA 0.2351526            NA
3  2017       NA 0.1330836            NA
4  2018 3170.621 0.2360980            NA
5  2019       NA 0.3999743      1268.167
6  2020       NA 0.3859426            NA
7  2021       NA 0.1650957            NA
8  2022       NA 0.1639453            NA
9  2023       NA 0.1556958            NA
10 2024       NA 0.1472708            NA
11 2025       NA 0.1465053            NA
12 2026       NA 0.1339976            NA
13 2027       NA 0.1231007            NA
14 2028       NA 0.1191319            NA
15 2029       NA 0.1155898            NA
16 2030       NA 0.1036754            NA

Как видите, процесс заполнения заканчивается в 2019 году. Я думал, что он заполнит новые данные до конца серии. Код, который я написал, действует так, как будто я использую «фактические» данные, а не «фактические заполненные». Может кто-нибудь сказать мне, что я делаю неправильно и как я могу это исправить?

Спасибо, Сойоко

1 Ответ

0 голосов
/ 27 февраля 2020

Вот решение, которое работает через al oop:

df$actual_filled<-df$actual
for (row in 2:nrow(df)) {
  if(!is.na(df$actual_filled[row-1])) {
    df$actual_filled[row] <- df$delta[row] * df$actual_filled[row-1]
  }
}

Я новичок в R, поэтому это может быть не лучшее решение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...