如何创建一个列来确定r中的变量中是否缺少值



我试图确定一列是否有基于max.score的缺失数字类别。这是一个样本数据集。

df <- data.frame(id = c(1,1,1,1,1, 2,2,2,2,2, 3,3,3,3,3),
score = c(0,0,2,0,2, 0,1,1,0,1, 0,1,0,1,0),
max.score = c(2,2,2,2,2, 1,1,1,1,1, 2,2,2,2,2))

> df
id score max.score
1   1     0         2
2   1     0         2
3   1     2         2
4   1     0         2
5   1     2         2
6   2     0         1
7   2     1         1
8   2     1         1
9   2     0         1
10  2     1         1
11  3     0         2
12  3     1         2
13  3     0         2
14  3     1         2
15  3     0         2

对于id=1,基于max.score,缺少1类别。我想添加missing列,说1之类的东西。当id=3缺少score=2时,missing列应该指示2的值。如果缺少一个以上的类别,那么它将指出这些缺失的类别,例如,1,3。期望的输出应该是:

> df
id score max.score  missing
1   1     0         2    1
2   1     0         2    1
3   1     2         2    1
4   1     0         2    1
5   1     2         2    1
6   2     0         1    NA
7   2     1         1    NA
8   2     1         1    NA
9   2     0         1    NA
10  2     1         1    NA
11  3     0         2    2
12  3     1         2    2
13  3     0         2    2
14  3     1         2    2
15  3     0         2    2

任何想法吗?谢谢!

df %>%
group_by(id) %>%
mutate(missing = toString(setdiff(0:max.score[1], unique(score))),
missing = ifelse(nzchar(missing), missing, NA))
# A tibble: 15 x 4
# Groups:   id [3]
id score max.score missing
<dbl> <dbl>     <dbl> <chr>  
1     1     0         2 1      
2     1     0         2 1      
3     1     2         2 1      
4     1     0         2 1      
5     1     2         2 1      
6     2     0         1 NA     
7     2     1         1 NA     
8     2     1         1 NA     
9     2     0         1 NA     
10     2     1         1 NA     
11     3     0         2 2      
12     3     1         2 2      
13     3     0         2 2      
14     3     1         2 2      
15     3     0         2 2  

最新更新