当A列为NA时,我想将B列中的值乘以A列之前的值

问题描述 投票:0回答:1

[当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
r dataframe dplyr na mutate
1个回答
0
投票

使用for循环的一种方法:

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
© www.soinside.com 2019 - 2024. All rights reserved.