【问题标题】:Removing duplicate combinations (irrespective of order)删除重复的组合(不考虑顺序)
【发布时间】:2012-02-20 03:38:10
【问题描述】:

我有一个整数数据框,它是所有 n 的子集,选择 1...n 的 3 种组合。 例如,对于 n=5,它类似于:

      [,1] [,2] [,3]
 [1,]    1    2    3
 [2,]    1    2    4
 [3,]    1    2    5
 [4,]    1    3    4
 [5,]    1    3    5
 [6,]    1    4    5
 [7,]    2    1    3
 [8,]    2    1    4
 [9,]    2    1    5
[10,]    2    3    4
[11,]    2    3    5
[12,]    2    4    5
[13,]    3    1    2
[14,]    3    1    4
[15,]    3    1    5
[16,]    3    2    4
[17,]    3    2    5
[18,]    3    4    5
[19,]    4    1    2
[20,]    4    1    3
[21,]    4    1    5
[22,]    4    2    3
[23,]    4    2    5
[24,]    4    3    5
[25,]    5    1    2
[26,]    5    1    3
[27,]    5    1    4
[28,]    5    2    3
[29,]    5    2    4
[30,]    5    3    4

我想做的是删除任何具有重复组合的行,而不管排序如何。例如,[1,] 1 2 3[1,] 2 1 3 相同,[1,] 3 1 2 相同。

uniqueduplicated 等。似乎没有考虑到这一点。此外,我正在处理大量数据(n 约为 750),所以它应该是一个相当快的操作。是否有任何基础函数或包可以做到这一点?

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    先在行内排序,再用重复,见下图:

    # example data    
    dat = matrix(scan('data.txt'), ncol = 3, byrow = TRUE)
    # Read 90 items
    
    dat[ !duplicated(apply(dat, 1, sort), MARGIN = 2), ]
    #       [,1] [,2] [,3]
    #  [1,]    1    2    3
    #  [2,]    1    2    4
    #  [3,]    1    2    5
    #  [4,]    1    3    4
    #  [5,]    1    3    5
    #  [6,]    1    4    5
    #  [7,]    2    3    4
    #  [8,]    2    3    5
    #  [9,]    2    4    5
    # [10,]    3    4    5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 2016-09-22
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2016-02-25
      相关资源
      最近更新 更多