根据另一个变量的第一次唯一出现来改变变量
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
我想创建一个变量来标识变量在列中的第一次出现,但我似乎无法使代码正常工作。
新的变量应该只标记一个非 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