выбор групп с нулевыми значениями по столбцу действий в R - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующие данные

    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

столбец действия может принимать значения только 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

1 Ответ

0 голосов
/ 24 августа 2018

Если я правильно вас понял, то понимаю, что ваш вопрос таков:

Мне нужно найти эти группы, где для 1 категории действий они имеют только нулевые значения х1.

так вот ответ:

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, и рассмотрим 2 основные категории для всех строк (0 и 1).Затем он отфильтровывает наблюдения, которые проходят action==1 & x1==0.Таким образом, это означает, что среди тех строк, которые имеют action==1, x1==0 также имеет значение true.

может ли скрипт вернуть все значения группы 555 + 666?

Нет .он не возвращает эти 2 группы.И это не должно делать это.Давайте напишем код, который фильтрует 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,Поэтому они не входят в число действительных ответов.

...