Процент% в%
Категориальная переменная 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)
- ваше искомое подмножество.