通过 R 中的操作列选择具有零值的组

selecting groups with zero values by action column in R

我有下一个数据

    mydat=structure(list(group = c(111L, 111L, 111L, 111L, 111L, 111L, 
111L, 333L, 333L, 333L, 333L, 333L, 333L, 333L, 555L, 555L, 555L, 
555L, 555L, 555L, 555L), group2 = c(222L, 222L, 222L, 222L, 222L, 
222L, 222L, 444L, 444L, 444L, 444L, 444L, 444L, 444L, 666L, 666L, 
666L, 666L, 666L, 666L, 666L), action = c(0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L
), x1 = c(1L, 2L, 3L, 0L, 0L, 1L, 2L, 1L, 2L, 3L, 0L, 0L, 1L, 
2L, 1L, 2L, 3L, 10L, 20L, 1L, 2L)), .Names = c("group", "group2", 
"action", "x1"), class = "data.frame", row.names = c(NA, -21L
))

这里有两个组变量(组和组2)。 一共有三组

111 222
333 444
555 666

action 列只能取值 0 和 1。

所以我需要找到这些组,其中对于 1 类动作,它们只有 x1 的零值。 在我们的例子中是

111 222
333 444

因为对于所有 1 类动作,它们的 x1 都是零。 所以我只能与 555 666 组一起工作。 因为 x1 变量的第一类动作至少有一个非零值。

想要的输出 Mydat1 这里用 x1 变量对第一类动作的至少一个非零值进行分组。

group   group2  action  x1
555      666    0   1
555      666    0   2
555      666    0   3
555      666    1   **10**
555      666    1   **20**
555      666    0   1
555      666    0   2

mydat2 组,对于所有 1 个动作类别,它们都为零 x1

group   group2  action  x1
111      222    0   1
111      222    0   2
111      222    0   3
111      222    1   **0**
111      222    1   **0**
111      222    0   1
111      222    0   2
333      444    0   1
333      444    0   2
333      444    0   3
333      444    1   **0**
333      444    1   **0**
333      444    0   1
333      444    0   2

如果我猜对了,那么理解你的问题是:

i need find these groups where for 1 category of action they have only zero values by x1.

所以这是回应:

library(tidyverse)
mydat  %>%
  group_by( action ) %>%
  filter( action==1 & x1==0 )

响应是:

  group group2 action    x1
  <int>  <int>  <int> <int>
1   111    222      1     0
2   111    222      1     0
3   333    444      1     0
4   333    444      1     0

这段代码有什么作用?

它查看 action 特征,并考虑所有行(0 和 1)的 2 个主要类别。然后它过滤掉通过 action==1 & x1==0 的观察结果。因此,这意味着,在具有 action==1 的那些行中,x1==0 也为真。

can script return all values of 555+666 group?

。它不 return 这两个组。它不应该那样做。让我们编写一个代码来过滤 555 和 666

library(tidyverse)
mydat  %>%
  group_by( action ) %>%
  filter( group==555 | group2==666 )

结果是:

group group2 action    x1
  <int>  <int>  <int> <int>
1   555    666      0     1
2   555    666      0     2
3   555    666      0     3
4   555    666      1    10
5   555    666      1    20
6   555    666      0     1
7   555    666      0     2

因此,如您所见,这些观察中的 none 满足条件 action==1 & x1==0。因此,它们不在有效响应之列。