330

データ フレーム D1 のカテゴリ変数 V1 は、A から Z までの文字で表される値を持つことができます。B、N、T などの一部の値を除外するサブセット D2 を作成したいと考えています。基本的には、次のようなコマンドが必要です。の反対%in%

D2 = subset(D1, V1 %in% c("B", "N", "T"))
4

13 に答える 13

439

基本的に、演算子を使用して、!すべての 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
于 2011-04-29T12:10:22.767 に答える
44

これは、! で論理を否定することにより、受け入れられた回答と同じ手法を適用するfilterinを使用するバージョンです。dplyr

D2 <- D1 %>% dplyr::filter(!V1 %in% c('B','N','T'))
于 2018-05-17T00:34:17.640 に答える
34

あなたがのコードを見れば%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
于 2011-04-29T13:16:22.210 に答える