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中执行此操作,因为我有一个大型数据集。
答案 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