データ フレーム D1 のカテゴリ変数 V1 は、A から Z までの文字で表される値を持つことができます。B、N、T などの一部の値を除外するサブセット D2 を作成したいと考えています。基本的には、次のようなコマンドが必要です。の反対%in%
D2 = subset(D1, V1 %in% c("B", "N", "T"))
基本的に、演算子を使用して、!
すべての TRUE FALSE およびすべての FALSE TRUE を作成できます。それで:
D2 = subset(D1, !(V1 %in% c('B','N','T')))
編集:自分で演算子を作成することもできます:
'%!in%' <- function(x,y)!('%in%'(x,y))
c(1,3,11)%!in%1:10
[1] FALSE FALSE TRUE
これは、! で論理を否定することにより、受け入れられた回答と同じ手法を適用するfilter
inを使用するバージョンです。dplyr
D2 <- D1 %>% dplyr::filter(!V1 %in% c('B','N','T'))
あなたがのコードを見れば%in%
function (x, table) match(x, table, nomatch = 0L) > 0L
そうすれば、反対のバージョンを書くことができるはずです。私が使う
`%not in%` <- function (x, table) is.na(match(x, table, nomatch=NA_integer_))
別の方法は次のとおりです。
function (x, table) match(x, table, nomatch = 0L) == 0L