Как удалить всю строку для х, если у появляется хотя бы один раз в том же столбце? - PullRequest
2 голосов
/ 01 ноября 2019

Я хотел бы запустить код, в котором я удаляю всю строку для записей «x», если «y» появляется хотя бы один раз в том же столбце «var4». Я не могу найти никакого решения в R. Ниже приведено то, что я пробовал.

В приведенном ниже коде я попытался сказать R, что если var4 содержит хотя бы один y, все строки, содержащие x, должны быть отфильтрованы /удалены.

Example for df:

var1 var2 var3 var4
 a    b    b    a
 b    a    b    x  
 a    b    a    x
 a    a    a    y

 if (all(df$var4 %in% c("y"))) { 
 df <- filter(!var4 %in% c("x"))
 }

Итак, я хотел бы удалить строки 2 и 3, потому что y появляется в var4. К сожалению, приведенный выше код не возвращает никаких изменений в df, хотя y появляется несколько раз в var4.

Большое спасибо. Я ценю любые рекомендации.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

В коде OP оператор filter не получает данные. Вместо этого это может быть

library(dplyr)
if("y" %in% df$var4) {
        df <- df %>%
                  filter(!var4 %in% "x")
  }

df
#  var1 var2 var3 var4
#1    a    b    b    a
#2    a    a    a    y

Это также может быть записано как

df %>%
    filter("y" %in% var4 & !var4 %in% 'x')

data

df <- structure(list(var1 = c("a", "b", "a", "a"), var2 = c("b", "a", 
"b", "a"), var3 = c("b", "b", "a", "a"), var4 = c("a", "x", "x", 
"y")), class = "data.frame", row.names = c(NA, -4L))
1 голос
/ 01 ноября 2019

Если вы хотите использовать базовые команды R.

df[!df$var4 == "x", ] должен это сделать.

df$var4 == "x" вернет вектор TRUE / FALSE

> df$var4 == "x"
[1] FALSE  TRUE  TRUE FALSE

The! перед ним переворачивается ИСТИННОЕ ЛОЖЬ

> !df$var4 == "x"
[1]  TRUE FALSE FALSE  TRUE

Тогда обозначение в скобках относится к подстановке объекта в строки, а затем в столбцы.

df[rows,columns]

Помещение всего этоговместе, следующее будет подмножество строк, основанных на предоставленных критериях, и будет включать все столбцы.

df[!df$var4 == "x", ]

Обратите внимание, что ничего после значения , включает все столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...