我正在寻求关于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)每个标记应在每个选项中仅研究一次(在该组中的一个个体中)。所有人都不必在每个选项中都有代表。
我怀疑解决方案将包含以下关键步骤:
我一直在努力解决这个问题,并且花了一整天时间使用grid.expand和combn编写了一个非常复杂的基于循环的方法,但这种方法并不成功。包含在这里太复杂和混乱。任何帮助表示赞赏。