Как использовать операторы в функции подмножества для удаления записей в R? - PullRequest
1 голос
/ 31 октября 2019

У меня есть датафрейм, как показано ниже

test_df <- data.frame("SN" = c(1,2,3,4,5), "code" = c("ABC","DEF","GHI","JKL","MNO"), "Name" = c("John","Dora","Raja","Poda","Podi"))

Это выглядит так, как показано ниже

enter image description here

Я хотел быудалить записи на основе нескольких условий, как указано ниже

sub_df <- subset(test_df, SN!="1" 
                      | !(code %in% c("GHI","MNO"))
                      | !(Name %in% c("Poda")))

Я пытался использовать операторы ||, &, &&, но ничего не помогает.

Обратите внимание, что в моих реальных данныхиз 4M, я не могу знать, какие строки я хочу, но я знаю, какие строки удалить. Поэтому я бы предпочел not equal(!) подход

Я ожидаю, что мой результат будет выглядеть так, как показано ниже

enter image description here

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Учитывая ожидаемый результат, вы должны использовать &, а не |.

Ниже приведено решение data.table.

Код

require(data.table); setDT(test_df)

restr = quote(SN != 1 & !(code %in% c('GHI', 'MNO')) & !(Name %in% c("Poda"))) #Define your restrictions

df = test_df[eval(restr)] # Apply restrictions

Результат

> df
   SN code Name
1:  2  DEF Dora
1 голос
/ 31 октября 2019

Вы можете попробовать следующее с & среди условий:

sub_df <- test_df[test_df$SN!=1 & !(test_df$code %in% c("GHI","MNO")) & !(test_df$Name %in% c("Poda")), ]
...