【问题标题】:Excluding elements of a vector from another vector, not using setdiff从另一个向量中排除一个向量的元素,不使用 setdiff
【发布时间】:2012-09-27 18:45:28
【问题描述】:

我有一个字符向量,我想从中排除存在于第二个向量中的元素。在这种情况下,我不知道如何在仍然考虑整个向量的情况下进行否定

vector[vector ! %in% vector2]

我显然可以使用vector[vector != single_character],但这仅适用于单个字符。

【问题讨论】:

    标签: r


    【解决方案1】:

    你已经接近了

    vector[!vector %in% vector2]
    

    或者,即使你说“不使用 setdiff”

    setdiff(vector, vector2)
    

    【讨论】:

      【解决方案2】:
      vector1 <- letters[1:4]
      set.seed(001)
      vector2 <- sample(letters[1:15], 10, replace=TRUE)
      
       vector1
      [1] "a" "b" "c" "d"
      vector2
       [1] "d" "f" "i" "n" "d" "n" "o" "j" "j" "a"
      
      vector2 [!(vector2 %in% vector1)] # elements in vector2 that are not in vector1
      [1] "f" "i" "n" "n" "o" "j" "j"
      

      【讨论】:

        【解决方案3】:

        你可以定义一个新的操作符,

         `%ni%` = Negate(`%in%`)
        

        【讨论】:

          【解决方案4】:

          现在可以使用更优雅的解决方案:

          library(textclean)
          # master character vector
          vector1 = c("blue", "green", "red")
          # vector containing elements to be removed from master vector
          vector2 = c("green", "red")
          drop_element_fixed(vector1, vector2)
          
          # Output:
          # [1] "blue"
          

          【讨论】:

            猜你喜欢
            • 2019-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多