Remove first occurrence of elements in a vector from another vector

前端 未结 1 638
面向向阳花
面向向阳花 2021-02-07 10:58

I have a character vector, including some elements that are duplicates e.g.

v <- c(\"d09\", \"d11\", \"d13\", \"d01\", \"d02\", \"d10\", \"d13\")
1条回答
  •  感情败类
    2021-02-07 11:53

    You can use match and negative indexing.

    v[-match(x, v)]
    

    produces

    [1] "d09" "d01" "d02" "d13"
    

    match only returns the location of the first match of a value, which we use to our advantage here.

    Note that %in% and is.element are degenerate versions of match. Compare:

    match(x, v)            # [1] 6 2 3
    match(x, v) > 0        # [1] TRUE TRUE TRUE
    x %in% v               # [1] TRUE TRUE TRUE
    is.element(x, v)       # [1] TRUE TRUE TRUE
    

    The last three are all the same, and are basically the coerced to logical version of the first (in fact, see code for %in% and is.element). In doing so you lose key information, which is the location of the first match of x in v and are left only knowing that x values exist in v.

    The converse, v %in% x means something different from what you want, which is "which values in v are in x", which won't meet your requirement since all duplicate values will satisfy that condition.

    0 讨论(0)
提交回复
热议问题