标记 R 数据框中组内的缺失类别

flag missing categories within a group in an R dataframe

score 变量缺少该项目 0max.score 之间的任何分数时,我想标记 itemid。这是一个示例数据集。

df <- data.frame(id = c(1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3),
                 itemid = c(11,11,11, 12,12,12, 13,13,13, 14,14,14, 15,15,15),
                 score = c(0,1,2, 1,2,2, 0,1,1, 2,0,0, 1,1,1),
                 max.points = c(2,2,2, 2,2,2, 1,1,1, 2,2,2, 1,1,1 ))

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

在这种情况下,itemid=12 缺少 0scoreitemid=14 缺少 1score,并且 itemid=15 缺少 0score

关于如何标记项目 12,14 和 15 有什么想法吗?

谢谢!

按'itemid'分组,通过检查max.points(从0开始)的序列all是否为%in%[=22来创建flag =] 并否定 (!)

library(dplyr)
df %>%
  group_by(itemid) %>%
  mutate(flag = !all(c(0, seq_len(first(max.points))) %in% score)) %>%
  ungroup

-输出

# A tibble: 15 × 5
      id itemid score max.points flag 
   <dbl>  <dbl> <dbl>      <dbl> <lgl>
 1     1     11     0          2 FALSE
 2     2     11     1          2 FALSE
 3     3     11     2          2 FALSE
 4     1     12     1          2 TRUE 
 5     2     12     2          2 TRUE 
 6     3     12     2          2 TRUE 
 7     1     13     0          1 FALSE
 8     2     13     1          1 FALSE
 9     3     13     1          1 FALSE
10     1     14     2          2 TRUE 
11     2     14     0          2 TRUE 
12     3     14     0          2 TRUE 
13     1     15     1          1 TRUE 
14     2     15     1          1 TRUE 
15     3     15     1          1 TRUE