通过 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
。因此,它们不在有效响应之列。
我有下一个数据
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
。因此,它们不在有效响应之列。