【问题标题】:How to inverse subset in R?如何在R中反转子集?
【发布时间】:2020-12-07 21:57:29
【问题描述】:

我正在尝试在 R 中创建完全包含组的不重叠子集。第一个子集包含来自完全包含组的元素对。另一个子集应该是全包组中的所有元素,而不是第一个子集中的元素。

poplength <- 10
samples <- 7
numpair <- 2
totallyinclusivegroup <- sample(1:poplength, samples)
Subset1 <- sample(totallyinclusivegroup, size = numpair*2)

我不知道如何获得包含“totallyinclusivegroup”中的所有内容但不包含在子集 1 中的“子集 2”。我尝试使用“-”运算符,但没有成功。例如,

Subset2  <- totallyinclusivegroup[-Subset1]

不起作用,并且包含来自 Subset1 的元素。任何建议/帮助表示赞赏。

【问题讨论】:

    标签: r subset


    【解决方案1】:

    我们可以在来自%in% 的逻辑向量上用! 取反,这样 TRUE -> FALSE 反之亦然

     out <- totallyinclusivegroup[!totallyinclusivegroup %in% Subset1]
    

    -输出

    Subset1
    #[1] 2 6 9 7
    
    totallyinclusivegroup
    #[1] 3 2 6 1 9 7 8
    
     out
    #[1] 3 1 8
    

    或者更简单的选择是setdiff

    setdiff(totallyinclusivegroup, Subset1)
    #[1] 3 1 8
    

    如果有重复元素,最好使用vsetdiff from vecsets

    library(vecsets)
    vsetdiff(totallyinclusivegroup, Subset1)
    

    【讨论】:

      【解决方案2】:

      试试:

      #Code
      Subset2  <- totallyinclusivegroup[-which(totallyinclusivegroup%in% Subset1 )]
      

      输出:

      totallyinclusivegroup
      [1]  8  5 10  2  9  1  3
      Subset1
      [1]  5 10  3  9
      Subset2
      [1] 8 2 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        相关资源
        最近更新 更多