programing

%in%의 반대: 벡터에 지정된 값이 있는 행 제외

copyandpastes 2023. 6. 15. 23:14
반응형

%in%의 반대: 벡터에 지정된 값이 있는 행 제외

데이터 프레임 D1의 범주형 변수 V1은 A부터 Z까지의 문자로 표시되는 값을 가질 수 있습니다.일부 값(예: B, N 및 T)을 제외한 부분 집합 D2를 생성하려고 합니다.기본적으로, 저는 다음과 반대되는 명령을 원합니다.%in%

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

사용할 수 있습니다.!연산자는 기본적으로 모든 TRUE와 모든 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

어때요?

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

다음은 다음을 사용하는 버전입니다.filterdplyr!:로 논리를 부정함으로써 허용된 답변과 동일한 기법을 적용합니다.

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

의 코드를 보면,%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

또한 에서를 사용하면 빠르고 깔끔하게 트릭을 수행할 수 있습니다.

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

예를 들어, 사용법은 다음과 같습니다.

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

purrr::compose()다음과 같이 나중에 사용할 수 있도록 빠르게 정의할 수 있는 또 다른 방법입니다.

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

다른 솔루션은 다음을 사용할 수 있습니다.setdiff

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

D2 = setdiff(D1, D0)

D2원하는 부분 집합입니다.

흐미스카스%nin%기능, 이렇게 해야 합니다.

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

library(roperators)

1 %ni% 2:10

사용자 지정 infix 연산자를 자주 사용해야 하는 경우 각 스크립트나 프로젝트에서 동일한 정확한 함수를 반복적으로 선언하는 것보다 패키지에 포함시키는 것이 더 쉽습니다.

축소에는 다음이 포함됩니다.%!in%.

%in에 대한 도움말,help("%in%")예제 섹션에는 다음과 같은 not 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

대안적으로

"%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
require(TSDT)

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

자세한 내용은 다음을 참조하십시오. https://cran.r-project.org/web/packages/TSDT/TSDT.pdf

Frank Harrell의 R 유틸리티 함수 패키지에서, 그는 원래 질문과 정확히 일치하는 %n%(내에 없음)를 가지고 있습니다.휠을 다시 발명할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/5831794/opposite-of-in-exclude-rows-with-values-specified-in-a-vector

반응형