R两组之间的逻辑组合

时间:2016-10-06 11:43:32

标签: r combinations combn

我正在寻求关于R中组合的一些帮助。

简化,我有一个由三个人(I)和一些标记(M)组成的小组,我有兴趣学习。每个标记的每个个体都是阳性或阴性。一些标记在该组中的两个个体中是阳性的,并且一些标记在该组中的三个个体中是阳性的。

我有兴趣找到每个成员之间存在的所有标记组合,使得每个标记在任何特定分组中只被研究一次。

    # three possible individuals in the group
    I <- c("I1","I2","I3")

    # 8 possible markers in the group
    M <- paste0("M", seq(1,8))

    # each marker can be either present (TRUE) or absent (FALSE)
    # in general, more markers are present than absent
    # this is random data for the purpose of example
    P <- sample(c(rep(TRUE, 16),rep(FALSE, 8)))

    # the input data looks like this
    d <- data.frame(I=rep(I, each=8), M=rep(M, 3), P=P)

       I  M     P
    1 I1 M1  TRUE
    2 I1 M2 FALSE
    3 I1 M3  TRUE
    4 I1 M4 FALSE
    5 I1 M5 FALSE
    6 I1 M6  TRUE

我的首选输出是长数据框,如:

    Option   I   M
    1        1   1
    1        1   2
    1        2   3
    2        1   2
    2        2   1
    2        2   3

每个选项都是该组三个成员之间的唯一正标记分布。这相当于广泛的数据框架,如:

           Option  I1      I2      I3
           1       M1, M2  M3
           2       M2      M1, M3
           3       

主要挑战是(i)所有标记必须在每个选项中表示,并且(ii)每个标记应在每个选项中仅研究一次(在该组中的一个个体中)。所有人都不必在每个选项中都有代表。

我怀疑解决方案将包含以下关键步骤:

  • 生成分配给三个组成员中每个成员的所有可能的标记组合,而不会在个体之间重复标记。
  • 删除正在测试的标记在其所分配的特定个体中不存在(TRUE)的组合。
  • 删除组合中标记重复的组合(如果尚未在第一步中成功实现)。

我一直在努力解决这个问题,并且花了一整天时间使用grid.expand和combn编写了一个非常复杂的基于循环的方法,但这种方法并不成功。包含在这里太复杂和混乱。任何帮助表示赞赏。

0 个答案:

没有答案
相关问题