数据帧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"))
当前回答
如何:
`%ni%` <- Negate(`%in%`)
c(1,3,11) %ni% 1:10
# [1] FALSE FALSE TRUE
其他回答
require(TSDT)
c(1,3,11) %nin% 1:10
# [1] FALSE FALSE TRUE
更多信息,请访问:https://cran.r-project.org/web/packages/TSDT/TSDT.pdf
另一个解决方案是使用setdiff
D1 = c("A",..., "Z") ; D0 = c("B","N","T")
D2 = setdiff(D1, D0)
D2是你想要的子集。
包崩溃内置了:%!在%中。
下面是在dplyr中使用过滤器的一个版本,它通过否定逻辑with !应用了与接受答案相同的技术:
D2 <- D1 %>% dplyr::filter(!V1 %in% c('B','N','T'))
使用negate from purrr也可以快速而整洁地达到目的:
`%not_in%` <- purrr::negate(`%in%`)
例如,用法是,
c("cat", "dog") %not_in% c("dog", "mouse")