【发布时间】:2021-01-07 01:59:32
【问题描述】:
我希望使用以下逻辑对数据框中的字段执行计算:
- 如果基值 != NA,则将基值分配给结果
- 如果基值 == NA,则取上一个结果,将其乘以乘数字段并将其作为结果输出。
假设第一个值永远不会是 NA,所以总会有一个种子值。我希望按数据组执行计算 (dplyr::group_by)
以下代码给出了一个代表:
basevalue <- c(2,5,NA,NA,NA,NA)
multiplier <- c(3.2,1.1,1.8,1.3,1.5,1.2)
previous_result <- c(NA,2,5,9,11.7,17.55)
result<- c(2,5,9,11.7,17.55,21.06)
logic <- c(rep("basevalue != NA, so take base value",2), rep("basevalue == NA, so take lag(result) * multiplier",4))
dfIn <- data.frame(basevalue,multiplier)
dfOut <- data.frame(basevalue,multiplier, result, previous_result, logic)
有没有办法使用简单的 dplyr / base R / tidyverse 逻辑来实现这一点,还是我需要使用诸如 zoo 之类的专业包?
【问题讨论】:
-
当我尝试将 dplyr::mutate 与 lag(result) 和 if_else 子句一起使用时,我无法有条件地获取先前的结果并在第一个结果之后获得 NA。