0

我正在寻求有关 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 编写了一个非常复杂的基于循环的方法,但没有成功。它过于复杂和混乱,无法包括在这里。任何帮助表示赞赏。

4

0 回答 0