[当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
使用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