Фильтрация наборов данных по одному столбцу и нескольким факторам - PullRequest
0 голосов
/ 18 сентября 2018

это, вероятно, простой вопрос, но я не мог найти решение, даже после того, как довольно долго искал вопросы и ответы и читал все шпаргалки, которые мог найти.

Допустим, у меня есть следующий набор данных

participant <- c(1, 1, 2, 2, 3,3 ,4,4)
trial <- c(1, 2, 2, 3, 4, 2, 3, 4) 
page <- c(1, 2, 2, 5, 6, 2, 1, 2) 
test <- data.frame(participant, trial, page)

Я хочу удалить из своего набора данных конкретные испытания и / или страницы внутри испытаний для конкретных участников.

Итак, допустим, я хочу удалить из своего набора данных пробную версию 2 и страницу 2 только для участника 1.

Я пробовал это, но он полностью удаляет участника

test <- dplyr::filter(test, participant != "1" & trial != "2" & page != "2")

Как я могу удалить только значения по отношению к другому значению? Спасибо!

1 Ответ

0 голосов
/ 06 марта 2019

dplyr::filter сохраняет только те строки, для которых выполняется условие. Вы правильно поняли, что простой способ сделать это - создать условный оператор, соответствующий строке, которую вы хотите удалить, а затем инвертировать ее, чтобы выбрать другие строки. Проблема в том, как преобразование == в != взаимодействует с оператором AND &

Вы задаете условие participant != "1" & trial != "2" & page != "2", которое выполняется только в том случае, если выполняются ВСЕ следующие условия (поскольку вы использовали &):

  • участник не 1
  • пробная версия не 2
  • страница не 2

Так что, если строка не соответствует ЛЮБОМУ из этих критериев (например, каждая строка, где participant == 1), она будет удалена


Поскольку вы хотите сделать это создать условный оператор, который соответствует строкам, которые вы хотите удалить, а затем инвертировать его с помощью оператора NOT ! вокруг всего оператора в скобках:

dplyr::filter(test, !(participant == 1 & trial == 2 & page == 2))

  participant trial page
1           1     1    1
2           2     2    2
3           2     3    5
4           3     4    6
5           3     2    2
6           4     3    1
7           4     4    2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...