基于%in%的R精确选择

gia*_*iac 6 r

我在执行简单操作时遇到了一些麻烦。

我想要的是简单地选择按分组的id具有所有值的行(-1, -2, -3, -4),并根据此条件应用标签。

   id time
1   1   -4
2   1   -3
3   1   -2
4   1   -1
5   2   -1
6   2   -2
7   3   -1
8   3   -3
9   4   -1
10  4   -2
11  4   -3
12  4   -4
Run Code Online (Sandbox Code Playgroud)

凭直觉我本来想要

rb[rb$time %in% c(-1, -2, -3, -4), ]
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,将全部id选中。因此,%in%操作员使用OR |操作员。

所以,我以为可以使用AND &运算符

rb[rb$time == -1 & 
 rb$time == -2 & 
 rb$time == -3 & 
 rb$time == -4, ]
Run Code Online (Sandbox Code Playgroud)

但这行不通。

任何有关如何标记或子集这些的线索id,例如

   id time tag
1   1   -4   1
2   1   -3   1
3   1   -2   1
4   1   -1   1
5   2   -1   0
6   2   -2   0
7   3   -1   0
8   3   -3   0
9   4   -1   1
10  4   -2   1
11  4   -3   1
12  4   -4   1
Run Code Online (Sandbox Code Playgroud)

tmf*_*mnk 7

一种dplyr可能是:

df %>%
 group_by(id) %>%
 mutate(tag = all(c(-1, -2, -3, -4) %in% time) * 1)

      id  time   tag
   <int> <int> <dbl>
 1     1    -4     1
 2     1    -3     1
 3     1    -2     1
 4     1    -1     1
 5     2    -1     0
 6     2    -2     0
 7     3    -1     0
 8     3    -3     0
 9     4    -1     1
10     4    -2     1
11     4    -3     1
12     4    -4     1
Run Code Online (Sandbox Code Playgroud)

相同的base R可能是:

with(df, ave(time, id, FUN = function(x) all(c(-1, -2, -3, -4) %in% x) * 1))
Run Code Online (Sandbox Code Playgroud)