【问题标题】:selecting groups with zero values by action column in R通过 R 中的操作列选择具有零值的组
【发布时间】:2018-08-24 10:38:13
【问题描述】:

我有下一个数据

    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

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

【问题讨论】:

    标签: r dplyr data.table plyr


    【解决方案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 &amp; 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 &amp; x1==0 。因此,它们不在有效响应之列。

    【讨论】:

    • Salman,好吧,但是除了你的输出,脚本可以返回 555+666 组的所有值吗?因此脚本必须返回您的输出(我们将其称为 mydat2)和 555+666 组的所有行。因为它至少有一个 x1 变量的第一类动作的非零值。 (x1 变量的第一类动作的至少一个非零值必须在输出 mydat1 中的组)。
    • @D.Joe 我不同意你的看法。让我先用额外的解释更新我的答案,然后我们可以谈谈。
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2015-08-26
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多