r - 如何将基本 r 中基于滞后的列转换转换为 dplyr 管道?

标签 r dplyr tidyverse

我有一段代码,在转换为 dplyr 管道时遇到了很多麻烦。

给定以下数据框:

library(tidyverse)
tb <- tribble(
    ~time, ~hazard_0, ~hazard_1,
    7, 0.04768284, 0.10710033,
    8, 0.02412410, 0.05590856,
    9, 0.09269841, 0.19662787,
    10, 0.13912236, 0.27908998,
    11, 0.16053845, 0.31418869,
    12, 0.23522180, 0.42422854

)
tb
#> # A tibble: 6 x 3
#>    time hazard_0 hazard_1
#>   <dbl>    <dbl>    <dbl>
#> 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<-c(1:6)
tb$surv_1<-c(1:6)
tb$surv_0[1]<-1-tb$hazard_0[1]
tb$surv_1[1]<-1-tb$hazard_1[1]
for(i in 2:6) {
    tb$surv_0[i] = tb$surv_0[i-1]*(1-tb$hazard_0[i])
    tb$surv_1[i] = tb$surv_1[i-1]*(1-tb$hazard_1[i])
}
tb
#> # A tibble: 6 x 5
#>    time hazard_0 hazard_1 surv_0 surv_1
#>   <dbl>    <dbl>    <dbl>  <dbl>  <dbl>
#> 1     7   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_0surv_1 的例程相同。

reprex package于2019年12月4日创建(v0.3.0)

最佳答案

cumprod 是您正在寻找的函数。

tb %>% mutate(surv_0 = cumprod(1 - hazard_0), surv_1 = cumprod(1 - hazard_1))

请注意,这取决于数据的顺序是否正确。

关于r - 如何将基本 r 中基于滞后的列转换转换为 dplyr 管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59185392/

相关文章:

r - 在dplyr 0.7.0+中正确使用dplyr::select,使用字符向量选择列

r - 使用 ggplot2 中子图的自定义 x,y 位置创建子图(小平面)

r - 在 R 中的 stats::lm 中使用可变参数(点-点-点)

r - 根据 data.frame 中的(组)值扩展 data.frame

r - 将ggplot文本放置在每个角

r - 如何在变异后将 t.test() 应用于多对列

r - 在 purrr 的 map() 函数中使用 levene_test?

R tidyr : use separate function to separate character column with comma-separated text into multiple columns using RegEx

r - 过滤数据集以不按列显示顶部行

r - 如何使用字符向量过滤数据框