根据另一个变量的第一次唯一出现来改变变量

Mutate variable conditional on first unique occurance of another variable

我想创建一个变量来标识变量在列中的第一次出现,但我似乎无法使代码正常工作。

新的变量应该只标记一个非 NA 索引,这是该变量的第一次出现,并且理想情况下在管道代码块中起作用。

我试过 lag() 但这个函数只查看单个值,而我想将索引值与列中的所有前面的值进行比较。

我试过滚动 windows 但我似乎无法让它工作,我尝试了更简单的解决方案,但无法让它工作:

示例:

df <- data.frame(index = c(NA,NA,1,NA,NA,1,2,NA,2,NA))
# Now add new column
df %>% mutate(Var = ifelse(!is.na(index & !index %in% index[1:nrow(.)],1,0))

期望的输出:

|index|Var|
|----|----|
| NA | 0 |  
| NA | 0 |  
| 1  | 1 |    
| NA | 0 |
| NA | 0 |
| 1  | 0 |
| 2  | 1 |
| NA | 0 |
| 2  | 0 |
| NA | 0 |

一个想法可以是创建一个标志 (new),它捕获 non-NAs (1 * (!is.na(index)... 1*就是将 TRUE/FALSE 转换为 1/0) 然后将索引中的所有重复值替换为 0

library(tidyverse)

df %>% 
 mutate(new = 1 * (!is.na(index)), 
        new = replace(new, duplicated(index), 0))

   index new
1     NA   0
2     NA   0
3      1   1
4     NA   0
5     NA   0
6      1   0
7      2   1
8     NA   0
9      2   0
10    NA   0