Test if a vector contains a given element

后端 未结 7 1375
慢半拍i
慢半拍i 2020-11-22 02:40

How to check if a vector contains a given value?

相关标签:
7条回答
  • 2020-11-22 02:44

    I will group the options based on output. Assume the following vector for all the examples.

    v <- c('z', 'a','b','a','e')
    

    For checking presence:

    %in%

    > 'a' %in% v
    [1] TRUE
    

    any()

    > any('a'==v)
    [1] TRUE
    

    is.element()

    > is.element('a', v)
    [1] TRUE
    

    For finding first occurance:

    match()

    > match('a', v)
    [1] 2
    

    For finding all occurances as vector of indices:

    which()

    > which('a' == v)
    [1] 2 4
    

    For finding all occurances as logical vector:

    ==

    > 'a' == v
    [1] FALSE  TRUE FALSE  TRUE FALSE
    

    Edit: Removing grep() and grepl() from the list for reason mentioned in comments

    0 讨论(0)
  • 2020-11-22 02:46

    You can use the %in% operator:

    vec <- c(1, 2, 3, 4, 5)
    1 %in% vec # true
    10 %in% vec # false
    
    0 讨论(0)
  • 2020-11-22 02:51

    Also to find the position of the element "which" can be used as

    pop <- c(3,4,5,7,13)
    
    which(pop==13)
    

    and to find the elements which are not contained in the target vector, one may do this:

    pop <- c(1,2,4,6,10)
    
    Tset <- c(2,10,7)   # Target set
    
    pop[which(!(pop%in%Tset))]
    
    0 讨论(0)
  • 2020-11-22 02:52

    is.element() makes for more readable code, and is identical to %in%

    v <- c('a','b','c','e')
    
    is.element('b', v)
    'b' %in% v
    ## both return TRUE
    
    is.element('f', v)
    'f' %in% v
    ## both return FALSE
    
    subv <- c('a', 'f')
    subv %in% v
    ## returns a vector TRUE FALSE
    is.element(subv, v)
    ## returns a vector TRUE FALSE
    
    0 讨论(0)
  • 2020-11-22 02:54

    I really like grep() and grepl() for this purpose.

    grep() returns a vector of integers, which indicate where matches are.

    yo <- c("a", "a", "b", "b", "c", "c")
    
    grep("b", yo)
    [1] 3 4
    

    grepl() returns a logical vector, with "TRUE" at the location of matches.

    yo <- c("a", "a", "b", "b", "c", "c")
    
    grepl("b", yo)
    [1] FALSE FALSE  TRUE  TRUE FALSE FALSE
    

    These functions are case-sensitive.

    0 讨论(0)
  • 2020-11-22 02:57

    The any() function makes for readable code

    > w <- c(1,2,3)
    > any(w==1)
    [1] TRUE
    
    > v <- c('a','b','c')
    > any(v=='b')
    [1] TRUE
    
    > any(v=='f')
    [1] FALSE
    
    0 讨论(0)
提交回复
热议问题