数据帧D1中的分类变量V1可以有从A到z的字母表示的值。我想创建一个子集D2,其中不包括一些值,比如B、N和t。基本上,我想要一个与%中的%相反的命令

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

当前回答

Hmisc有%nin%函数,它应该做到这一点。

https://www.rdocumentation.org/packages/Hmisc/versions/4.4-0/topics/%25nin%25

其他回答

Purrr::compose()是另一种快速定义方法,以供以后使用,如下所示:

`%!in%` <- compose(`!`, `%in%`)

另一个解决方案是使用setdiff

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

D2 = setdiff(D1, D0)

D2是你想要的子集。

对于%in%的帮助,help("%in%"),在示例部分中包含了not in的定义,

"%w/o%" <-函数(x, y) x[!X %in% y] #——X不含y

让我们试试吧:

c(2,3,4) %w/o% c(2,8,9)
[1] 3 4

另外

"%w/o%" <- function(x, y) !x %in% y #--  x without y
c(2,3,4) %w/o% c(2,8,9)
# [1] FALSE  TRUE  TRUE

使用negate from purrr也可以快速而整洁地达到目的:

`%not_in%` <- purrr::negate(`%in%`)

例如,用法是,

c("cat", "dog") %not_in% c("dog", "mouse")

Hmisc有%nin%函数,它应该做到这一点。

https://www.rdocumentation.org/packages/Hmisc/versions/4.4-0/topics/%25nin%25