如何将base r中基于滞后的列转换转换为dplyr管道?
我有一段代码在翻译成dplyr管道时遇到了很多麻烦 给定以下数据帧:如何将base r中基于滞后的列转换转换为dplyr管道?,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一段代码在翻译成dplyr管道时遇到了很多麻烦 给定以下数据帧: 库(tidyverse) tb#A tibble:6 x 3 #>时间危险0危险1 #> #> 1 7 0.0477 0.107 #> 2 8 0.0241 0.0559 #> 3 9 0.0927 0.197 #> 4 10 0.139 0.279 #> 5 11 0.161 0.314 #> 6 12 0
库(tidyverse)
tb#A tibble:6 x 3
#>时间危险0危险1
#>
#> 1 7 0.0477 0.107
#> 2 8 0.0241 0.0559
#> 3 9 0.0927 0.197
#> 4 10 0.139 0.279
#> 5 11 0.161 0.314
#> 6 12 0.235 0.424
我要执行以下例行程序:
tb$surv_0 17 0.0477 0.107 0.952 0.893
#> 2 8 0.0241 0.0559 0.929 0.843
#> 3 9 0.0927 0.197 0.843 0.677
#> 4 10 0.139 0.279 0.726 0.488
#> 5 11 0.161 0.314 0.609 0.335
#> 6 12 0.235 0.424 0.466 0.193
surv_0
和surv_1
的例程相同
由(v0.3.0)于2019-12-04创建的cumprod是您正在寻找的功能
tb %>% mutate(surv_0 = cumprod(1 - hazard_0), surv_1 = cumprod(1 - hazard_1))
请注意,这取决于数据的顺序是否正确。在这种情况下,您绝对应该使用
cumprod
,因为它会更快更干净。在更一般的情况下,如果对象值不太清楚地依赖于以前的迭代,并且无法通过累积函数的组合获得正确的输出,则始终可以在函数中包装逻辑以在管道中使用它。您可以将一个非常简单的循环与累计
一起使用,也可以花最少的时间翻译现有循环并将其放入函数中
库(tidyverse)
tb 28 0.0241 0.0559 0.929 0.929
#> 3 9 0.0927 0.197 0.843 0.843
#> 4 10 0.139 0.279 0.726 0.726
#> 5 11 0.161 0.314 0.609 0.609
#> 6 12 0.235 0.424 0.466 0.466
由(v0.3.0)于2019-12-04创建