数据帧D1中的分类变量V1可以有从A到z的字母表示的值。我想创建一个子集D2,其中不包括一些值,比如B、N和t。基本上,我想要一个与%中的%相反的命令
D2 = subset(D1, V1 %in% c("B", "N", "T"))
数据帧D1中的分类变量V1可以有从A到z的字母表示的值。我想创建一个子集D2,其中不包括一些值,比如B、N和t。基本上,我想要一个与%中的%相反的命令
D2 = subset(D1, V1 %in% c("B", "N", "T"))
当前回答
对于%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
其他回答
在Frank Harrell的R效用函数包中,他有一个%nin% (not In),它完全符合最初的问题。不需要重新发明轮子。
你可以使用!运算符基本上使任何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
包崩溃内置了:%!在%中。
使用negate from purrr也可以快速而整洁地达到目的:
`%not_in%` <- purrr::negate(`%in%`)
例如,用法是,
c("cat", "dog") %not_in% c("dog", "mouse")
library(roperators)
1 %ni% 2:10
如果经常需要使用自定义中缀操作符,那么在包中使用中缀操作符比在每个脚本或项目中反复声明相同的函数更容易。