데이터 프레임 D1의 categorical 형 변수 V1은 A에서 Z까지의 문자로 표시되는 값을 가질 수 있습니다. B, N 및 T와 같은 일부 값을 제외한 하위 집합 D2를 만들고 싶습니다. 기본적으로 다음과 같은 명령을 원합니다. ~와 반대 인 %in%
D2 = subset(D1, V1 %in% c('B','N',T'))
데이터 프레임 D1의 categorical 형 변수 V1은 A에서 Z까지의 문자로 표시되는 값을 가질 수 있습니다. B, N 및 T와 같은 일부 값을 제외한 하위 집합 D2를 만들고 싶습니다. 기본적으로 다음과 같은 명령을 원합니다. ~와 반대 인 %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%"
새 연산자가 호출 되는 help (match) 페이지 (입력 한 경우 표시 되는 위치)에 설명되어 %w/o%
있습니다.
?Negate
예"%ni%" <- Negate("%in%")
subset(df, variable %ni% c("A", "B"))
, subset(df, variable Negate("%in%") c("A", "B"))
%
. 연산자를 만들려면로 시작하고 끝나는 이름에 두 개의 피연산자가있는 함수를 할당해야합니다 %
.
당신이 코드를 보면 %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
negate
from purrr
을 사용 하면 트릭을 빠르고 깔끔하게 수행합니다.
`%not_in%` <- purrr::negate(`%in%`)
예를 들어 사용법은
c("cat", "dog") %not_in% c("dog", "mouse")
Negate
같은 기능을하는 내장 기능도 있습니다 . 유일한 차이점은 purrr 호출입니다 as_mapper
당신이 동안, 전달하는 일에 Negate
전화 match.fun
. rdocumentation.org/packages/purrr/versions/0.2.5/topics/… stat.ethz.ch/R-manual/R-devel/library/base/html/match.fun.html
다른 해결책은 setdiff
D1 = c("A",..., "Z") ; D0 = c("B","N","T")
D2 = setdiff(D1, D0)
D2
원하는 하위 집합입니다.
Hmisc은 %nin%
기능이 있습니다.
https://www.rdocumentation.org/packages/Hmisc/versions/4.4-0/topics/%25nin%25
가장 명확한 사용법은
!('Spain' %in% c('Germany', 'France', 'Italy'))
library(roperators)
1 %ni% 2:10
require(TSDT)
c(1,3,11) %nin% 1:10
# [1] FALSE FALSE TRUE
자세한 내용은 https://cran.r-project.org/web/packages/TSDT/TSDT.pdf를 참조하십시오.
!(x %in% y)
). 인생은 때때로 쉬울 수 있습니다 ...