根据数据框中的特定条件添加FLAG

时间:2017-09-19 00:02:58

标签: r

 df <- 
 ID    AMT    
  1    NA     
  1    50    
  1    NA
  2    NA
  2    NA
  2    50


 dfout <- 
 ID    AMT   FLAG  
  1    NA     1
  1    50     0 
  1    NA     0
  2    NA     1 
  2    NA     1
  2    50     0

对于每个主题ID,当AMT为NA时,添加FLAG==1,直到您有一行AMT&gt; 0,然后该主题的其余FLAG为0.例如,对于'df'中的主题1,应当为AMT为NA时的第一行给出FLAG==1。但是,虽然同一主题的最后一行是NA,但是当我们在它之前触及AMT> 0时,FLAG应该为零。

如何在R中执行此操作,因为我有一个大型数据集。

1 个答案:

答案 0 :(得分:1)

这是可行的一种方式:

library(tidyverse)

df <- tribble(
~ID,  ~AMT,    
1,    NA,     
1,    50,    
1,    NA,
2,    NA,
2,    NA,
2,    50)

df %>% 
  rownames_to_column() %>%
  group_by(ID) %>%
  mutate(x = as.numeric(rowname < min(rowname[!is.na(AMT)])))

#> # A tibble: 6 x 4
#> # Groups:   ID [2]
#>   rowname    ID   AMT     x
#>     <chr> <dbl> <dbl> <dbl>
#> 1       1     1    NA     1
#> 2       2     1    50     0
#> 3       3     1    NA     0
#> 4       4     2    NA     1
#> 5       5     2    NA     1
#> 6       6     2    50     0