我有下一个数据
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
))
这里有两个组变量(group和group2)。 一共有三组
111 222
333 444
555 666
操作列只能取值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类操作,它们的x值均为0
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
答案 0 :(得分:1)
如果我答对了,那么您的问题是:
我需要找到这些小组,其中有1类行动 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
也是如此。
脚本可以返回555 + 666组的所有值吗?
否。它不会返回这两个组。而且它不应该那样做。让我们编写一个过滤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
因此,如您所见,这些观察都没有满足条件action==1 & x1==0
。因此,它们不在有效响应之内。