与%相反的百分比

时间:2011-04-29 12:06:07

标签: r

数据框D1中的分类变量V1可以具有由A到Z的字母表示的值。我想创建一个子集D2,它排除了一些值,比如B,N和T.基本上,我想要一个命令与%in%

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

16 个答案:

答案 0 :(得分:262)

您可以使用!运算符基本上使其为TRUE FALSE且每次都为FALSE。这样:

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

答案 1 :(得分:41)

怎么样:

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

答案 2 :(得分:28)

如果查看%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 :(得分:10)

以下是filter中使用dplyr的版本,它通过否定逻辑来应用与接受的答案相同的技术!:

D2 <- D1 %>% dplyr::filter(!V1 %in% c('B','N','T'))

答案 4 :(得分:8)

使用negate中的purrr也可以快速,巧妙地完成这项工作:

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

然后用法是,例如,

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

答案 5 :(得分:6)

purrr::compose()是另一种快速定义此方法以供日后使用的方法,如:

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

答案 6 :(得分:3)

与其创建自己的函数,不如取消其行为会很有用

needle %in% haystack 

改为执行此操作:

!(needle %in% haystack)

这也可以。

答案 7 :(得分:2)

另一种解决方案可能是使用function getpostsfromfavouritecookie(cookiecontents){ var val = JSON.parse(cookiecontents), v = val[0]; // the contents of the cookie is a one-node array return v.posts; } var cookiecontents = readCookie('simplefavorites'); var posts = getpostsfromfavouritecookie(cookiecontents); alert(posts);

setdiff

D1 = c("A",..., "Z") ; D0 = c("B","N","T") D2 = setdiff(D1, D0) 是您理想的子集。

答案 8 :(得分:2)

Hmisc具有%nin%功能,应该执行此功能。

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

答案 9 :(得分:1)

这对我来说很好:

`%nin%` <- Negate(`%in%`)

答案 10 :(得分:1)

无需定义自己。包 Hmisc 具有运算符 %nin% .

library(Hmisc)
"A" %nin% c("A","B")
#[1] FALSE
"A" %nin% c("C","B")
#[1] TRUE

答案 11 :(得分:0)

%in%的帮助help("%in%")在“示例”部分中包含“不在”的定义

"%w/o%" <- function(x, y) x[!x %in% y] #-- x without y

让我们尝试一下:

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

答案 12 :(得分:0)

library(roperators)

1 %ni% 2:10

如果您经常需要使用自定义的infix运算符,则将它们放在一个包中比在每个脚本或项目中一遍又一遍地声明相同的确切函数要容易得多。

答案 13 :(得分:0)

require(TSDT)

c(1,3,11) %nin% 1:10
# [1] FALSE FALSE  TRUE

有关更多信息,您可以参考:https://cran.r-project.org/web/packages/TSDT/TSDT.pdf

答案 14 :(得分:0)

包折叠中内置有%!in%

答案 15 :(得分:0)

或者也许只是;-)

c(1,3,11) %in% 1:10

[1]  TRUE  TRUE FALSE

!c(1,3,11) %in% 1:10

[1] FALSE FALSE  TRUE