我在执行简单操作时遇到了一些麻烦。
我想要的是简单地选择按分组的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)
一种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)