相对于%的%
dataframeD1中的分类variablesV1可以具有由从A到Z的字母表示的值。我想创build一个子集D2,它排除了某些值,比如B,N和T.基本上,我想要一个命令,它是与%in%
相反%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
如果你看%in%
的代码%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
怎么样:
'%ni%' <- Negate('%in%') c(1,3,11)%ni%1:10 [1] FALSE FALSE TRUE
那么,另一个解决scheme可能如下:
D1 = c(“A”,…,“Z”); D0 = c(“B”,“N”,“T”)
D2 = setdiff(D1,D0)
是你想要的子集。