【问题标题】:R define a new variable as count starting when condition is metR定义一个新变量作为满足条件时开始的计数
【发布时间】:2020-11-25 00:17:50
【问题描述】:

所以我正在尝试向我的数据框添加两个新变量。一个名为 start 的变量,它应该是一个从 0 到一组行数的连续计数,另一个名为 stop 的变量实际上是相同的,但从 1 开始。计数应该开始,一旦第二个变量的值得分 > 0。更重要的是,计数一直持续到组的最后一个值(因此,如果再次Var1=0,它不应该停止)并且从某种意义上说NAs 被忽略,计数继续。 以以下数据集为例

ID    Var1   start   stop
1      0
1      1       0      1
1      4       1      2 
1      2       2      3
1      NA      3      4
1      4       4      5
2      0
2      0
2      3       0      1
2      5       1      2
2      9       2      3
2      0       3      4

我并不真正关心 startstop 先于 Var1>0 的值,所以是 0 还是 NA 并不重要

非常感谢您提前提供的好答案!

【问题讨论】:

  • 查看rle,将数据变成1或0,然后rle结果,然后seq_along或长度上的东西,将此向量添加到您的列中,我稍后可以解决这个问题

标签: r count conditional-statements survival-analysis


【解决方案1】:

问题的肮脏解决方案,可能只是取出我作为步骤使用 select 制作的额外列

library(tidyverse)


df_example <- read_table("ID    Var1   start   stop
1      0
1      1       0      1
1      4       1      2 
1      2       2      3
1      NA      3      4
1      4       4      5
2      0
2      0
2      3       0      1
2      5       1      2
2      9       2      3
2      0       3      4")

df_example %>%
  group_by(ID) %>% 
  mutate(greater_1 = if_else(replace_na(Var1,1) > 0,1,0),
         run_sum = cumsum(greater_1),
         to_fill = if_else(run_sum == 1,1,NA_real_)) %>% 
  fill(to_fill) %>% 
  mutate(end2 = cumsum(to_fill %>% replace_na(0)),
         star2 = if_else(end2 -1 > 0,end2 -1,0))
#> # A tibble: 12 x 9
#> # Groups:   ID [2]
#>       ID  Var1 start  stop greater_1 run_sum to_fill  end2 star2
#>    <dbl> <dbl> <dbl> <dbl>     <dbl>   <dbl>   <dbl> <dbl> <dbl>
#>  1     1     0    NA    NA         0       0      NA     0     0
#>  2     1     1     0     1         1       1       1     1     0
#>  3     1     4     1     2         1       2       1     2     1
#>  4     1     2     2     3         1       3       1     3     2
#>  5     1    NA     3     4         1       4       1     4     3
#>  6     1     4     4     5         1       5       1     5     4
#>  7     2     0    NA    NA         0       0      NA     0     0
#>  8     2     0    NA    NA         0       0      NA     0     0
#>  9     2     3     0     1         1       1       1     1     0
#> 10     2     5     1     2         1       2       1     2     1
#> 11     2     9     2     3         1       3       1     3     2
#> 12     2     0     3     4         0       3       1     4     3

reprex package (v0.3.0) 于 2020 年 8 月 4 日创建

【讨论】:

    猜你喜欢
    • 2020-12-08
    • 2020-11-18
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多