Когда столбец A равен NA, я хочу умножить значение в столбце B на значение непосредственно перед столбцом A - PullRequest
0 голосов
/ 27 марта 2020

Когда столбец A равен NA, я хочу умножить значение в столбце B на значение непосредственно перед столбцом A. Я не знаю, как накапливать, когда NA непрерывны. Я хочу, чтобы результат выглядел как столбец C ниже.

dat <- data.frame(A=c(1, 1, NA, 1, NA, NA, NA, 1), B=c(1, 2, 2, 2, 2, 3, 4, 2))

> dat
   A    B
1  1    1
2  1    2
3 NA    2
4  1    2
5 NA    2
6 NA    3
7 NA    4
8  1    2

#-------------------------------------------
# C is NAs
result <- 
    dat %>% 
    mutate(C = ifelse(is.na(A), lag(A)*B, A))

> result
   A B  C
1  1 1  1
2  1 2  1
3 NA 2  2
4  1 2  1
5 NA 2  2
6 NA 3 NA
7 NA 4 NA
8  1 2  1
#-------------------------------------------

> result
   A    B    C
1  1    1    1
2  1    2    1
3 NA    2    2
4  1    2    1
5 NA    2    2
6 NA    3    6
7 NA    4   24
8  1    2    1

1 Ответ

0 голосов
/ 27 марта 2020

Один способ сделать это, используя for l oop:

dat$C <- NA

for(i in seq_len(nrow(dat))) {
   if (is.na(dat$A[i])) dat$C[i] <- dat$C[i-1] * dat$B[i]
   else dat$C[i] <- dat$A[i]
}

dat

#   A B  C
#1  1 1  1
#2  1 2  1
#3 NA 2  2
#4  1 2  1
#5 NA 2  2
#6 NA 3  6
#7 NA 4 24
#8  1 2  1
...