【发布时间】:2023-02-22 16:38:10
【问题描述】:
在 R 中,我想执行一个 mutate 来填充多列(x 和 y)的 NA 值。
data <- data.table(year = c(2010, 2011, 2012, 2013, 2014), x=c(1, 3, NA, NA, NA), y=c(2, 4, NA, NA, NA))
| year | x | y |
|---|---|---|
| 2010 | 1 | 2 |
| 2011 | 3 | 4 |
| 2012 | NA | NA |
| 2013 | NA | NA |
| 2014 | NA | NA |
然而,这些计算取决于另一列的滞后值。对于年份大于 2011 的值,x = x(上一行)+ y(上一行)和 y = x(前 2 行)+ y(前 2 行)
那么预期的输出将是
| year | x | y |
|---|---|---|
| 2010 | 1 | 2 |
| 2011 | 3 | 4 |
| 2012 | 7 | 3 |
| 2013 | 10 | 7 |
| 2014 | 17 | 10 |
这是我运行的代码:
data %>%
mutate(
x = case_when(
year > 2011 ~ lag(x, 1) + lag(y, 1),
TRUE ~ x),
y = case_when(
year > 2011 ~ lag(x, 2) + lag(y, 2),
TRUE ~ y))
但是,这不起作用,因为无论它们的计算顺序如何,每个变量的变异都取决于尚未计算的 NA 值(因此无法计算 2013 年 x 的值,因为 y 的变异计算2012 年的值尚未执行,但情况相反,y 需要 2012 年的 x 值)。我的数据集比这大得多,并且有一个更复杂的计算涉及第三个变量,该变量也以类似的方式相互依赖。
有没有办法同时运行这些变异或任何其他解决方案来解决这个问题?
【问题讨论】: