>

dplyr::select() 에 대한 헬퍼 함수를 ​​반전시키는 방법 ( matches() 와 같은  또는 contains() ) 특정 문자열을 포함하지 않거나 일치하지 않는 변수를 선택할 수 있습니까?

예를 들어, mtcars 데이터 프레임에서 문자 "m"이없는 모든 열을 선택하려고한다고 가정합니다. 다음과 같은 일을 상상할 수 있습니다.

mtcars %>%
    select( !matches("m") )

그러나 오류가 발생합니다 :

Error: !matches("m") must resolve to integer column positions, not a logical vector

반전시키기 위해 도우미 함수를 작성하려면 어떻게합니까?

중요한 참고 : 한 가지 가능성은 matches() 를 사용하는 것입니다.  일치하지 않는 정규 표현식을 작성하지만 헬퍼 함수의 단순성을 유지하는 방법을 찾는 데 더 관심이 있지만 실제 "어떻게 선택하고 어떻게 선택합니까? 그런 "문제.


  • 답변 # 1

    select() 를위한 헬퍼 함수   matches() 처럼 , contains() , starts_with()  등등, 인덱스 값으로 구성된 벡터를 반환합니다. 위의 예에서 역수를 원하지 않으면 matches("m")   c(1,9) 를 반환합니다  첫 번째와 아홉 번째 열 이름에 "m"이 포함되어 있기 때문입니다.

    그것을 염두에두고, 우리가해야 할 일은 그 함수를 부정적으로 만드는 것입니다 :

    mtcars %>%
        select( -matches("m") )
    
    
    그게 matches("m") 를 만드는   c(-1, -9) 의 벡터를 반환  열을 선택 해제하지만 다른 항목은 모두 남겨 둡니다.

    ! 사용 부울 NOT 원래 예에서와 같이 c(1,9) 대신 정수 값을 논리 값으로 강제 변환합니다. , 당신은 c(FALSE, FALSE) 로 끝납니다  1과 9는 모두 TRUE 로 강제  그러나 ! 에 의해 반전 .

    이것은 R이 위에 던지고있는 오류를 설명합니다 -- select()  논리 값으로 구성된 벡터가 아닌 열 인덱스에 해당하는 정수 목록을 원합니다.

  • 이전 javascript - typeerror - 는 함수가 아닙니다 이것을 묶는 올바른 방법 js의 참조
  • 다음 html - 스타일링 vs