Процент% в%

Категориальная переменная V1 в кадре данных D1 может иметь значения, представленные буквами от A до Z. Я хочу создать подмножество D2, которое исключает некоторые значения, скажем, B, N и T. В принципе, я хочу команда, противоположная %in%

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

Ответ 1

Вы можете использовать оператор !, чтобы в принципе сделать любой TRUE FALSE и каждый FALSE TRUE. так:

D2 = subset(D1, !(V1 %in% c('B','N',T')))

EDIT: Вы также можете сделать оператора самостоятельно:

'%!in%' <- function(x,y)!('%in%'(x,y))

c(1,3,11)%!in%1:10
[1] FALSE FALSE  TRUE

Ответ 2

Если вы посмотрите на код %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

Ответ 3

Как насчет:

 '%ni%' <- Negate('%in%')
 c(1,3,11)%ni%1:10
 [1] FALSE FALSE  TRUE

Ответ 4

Ну, другое решение может быть следующим: -

D1 = c ( "A",..., "Z" ); D0 = c ( "B", "N", "T" )

D2 = setdiff (D1, D0)

- ваше искомое подмножество.