0

找不到类似的问题,所以我们开始吧:我在 R 中有一个大型数据集,我想为危害分析做准备。因此,我想创建一个二分法生存变量。但是,我的危险事件有一个相对的解释,而不仅仅是某个值为 0。数据集的形式为:

ID    y
1     0
1     15
1     30
1     29
1     10
2     11
2     64
2     86
2     79
2     75

加上一堆自变量和控制变量。ID 输入适合生存分析的子集,因为 y > 0。回到危险变量:我希望它取“1”,因为 y 的减小值低于阈值,即 y 达到的最大值的 75%关于 ID 组。因此,该危害必须满足两个条件:

  1. 值低于阈值(相对于它们的 ID)
  2. 值正在减少。因此,如果存在与上述类似的列,对于 ID 2 的前两个值,危险变量不应编码为“1”,因为这些值可能低于阈值但高于前一个值。

有人有解决方案吗?提前致谢?

4

1 回答 1

1

如果我理解正确,只有第 1 组中的最后一个值应该满足条件,因为它正在减少并且小于组最大值的 75%。在第 2 组中,没有符合这些标准的值。

tidyverse 解决方案如下所示:

library(dplyr)

df %>% 
  group_by(ID) %>%
  mutate(hazard = +(y < 0.75 * max(y) & c(0, diff(y)) < 0))
#> # A tibble: 10 x 3
#> # Groups:   ID [2]
#>       ID     y hazard
#>    <int> <int>  <int>
#>  1     1     0      0
#>  2     1    15      0
#>  3     1    30      0
#>  4     1    29      0
#>  5     1    10      1
#>  6     2    11      0
#>  7     2    64      0
#>  8     2    86      0
#>  9     2    79      0
#> 10     2    75      0

数据

df <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
                     y  = c(0L, 15L, 30L, 29L, 10L, 11L, 64L, 86L, 79L, 75L)), 
                class = "data.frame", row.names = c(NA,  -10L))

reprex 包(v0.3.0)于 2020 年 7 月 25 日创建

于 2020-07-25T10:04:29.883 回答