配子位置的所有可能的唯一对组合

All possible unique pair combinations of gamete positions

我有一些以下格式的配子数据:

Ind Letter Place Position
1   A      19    23
2   B      19    23
3   B      19    23
4   B      19    23
1   B      19    34
2   A      19    34
3   B      19    34
4   B      19    34
1   C      19    52
2   T      19    52
3   C      19    52
4   T      19    52
1   T      33    15
2   T      33    15
3   T      33    15
4   C      33    15
1   C      33    26
2   T      33    26
3   T      33    26
4   C      33    26

数据输入:

structure(list(Ind = c(1L,2L,3L,4L,1L,2L,3L,4L,1L,2L,3L,4L,1L,2L,3L,4L,1L,2L,3L,4L),
      Letter = structure(c(1L,2L,2L,2L,2L,1L,2L,2L,3L,4L,3L,4L,4L,4L,4L,3L,3L,4L,4L,3L),
                       .Label = c("A","B","C","T"), class="factor"), 
      Place = c(19L,19L,19L,19L,19L,19L,19L,19L,19L,19L,19L,19L,33L,33L,33L,33L,33L,33L,33L,33L),
      Position = c(23L,23L,23L,23L,34L,34L,34L,34L,52L,52L,52L,52L,15L,15L,15L,15L,26L,26L,26L,26L)),
    .Names = c("Ind","Letter","Place","Position"),
    class="data.frame", row.names = c(NA,-20L))

我需要对它们进行配对和组合,因此我根据一对中的位置获得了所有可能的唯一组合。我有另一个数据文件,其中包含有关配对的信息,并且它们是根据 Place 配对的。所以在这个文件中我可能会看到,Place 19+Place 33 是​​一对,我想要以下结果:

Ind Letter Place Position Ind Letter Place Position
1   A      19    23       1   T      33    15
2   B      19    23       2   T      33    15
3   B      19    23       3   T      33    15
4   B      19    23       4   C      33    15

1   A      19    23       1   C      33    26
2   B      19    23       2   T      33    26
3   B      19    23       3   T      33    26
4   B      19    23       4   C      33    26

1   B      19    34       1   T      33    15
2   A      19    34       2   T      33    15
3   B      19    34       3   T      33    15
4   B      19    34       4   C      33    15

1   B      19    34       1   C      33    26
2   A      19    34       2   T      33    26
3   B      19    34       3   T      33    26
4   B      19    34       4   C      33    26

1   C      19    52       1   T      33    15
2   T      19    52       2   T      33    15
3   C      19    52       3   T      33    15
4   T      19    52       4   C      33    15

1   C      19    52       1   C      33    26
2   T      19    52       2   T      33    26
3   C      19    52       3   T      33    26
4   T      19    52       4   C      33    26

在这种情况下 unique 意味着 A1:A2 等于 A2:A1。 我想这样做的原因是因为我想对配对进行四配子测试,看看是否存在字母的所有可能组合。所以例如对于上面的最后一个组合对,我们有字母对 CC、TT、CT、TC,所以这个组合对将通过 FGT。

我尝试用 expand.grid 进行合并,因为这似乎非常接近我想要的。然而,当我需要数据$Position 的所有组合时,我丢失了 Ind、Letter 和 Place 的信息。输出还包括非唯一对。

谁能给我指点一个更接近我想要的工具?或者给我一些关于如何修改 expand.grid 的指南,以获得我需要的东西。 如果您知道一种工具,它实际上可以进行四配子测试或类似的东西,那么我当然也会很感兴趣。

您可以使用 expand.grid 但不能直接在 Position 列上使用。这个想法是找到 "quartets" (唯一位置)的所有组合:

pair <- c(19, 33)

df1 <- df1[df1$Place %in% pair, ]
split1 <- split( df1, df1$Position)

vec1 <- unique(df1$Position[df1$Place == pair[1]])
vec2 <- unique(df1$Position[df1$Place == pair[2]])

combin_num <- expand.grid(vec2, vec1)[,2:1]

do.call( 
  rbind,
  lapply(seq_len(nrow(combin_num)), function(i){
    cbind( split1[[as.character(combin_num[i,1])]], 
           split1[[as.character(combin_num[i,2])]]  )
  })
)[,]

结果:

#       Ind Letter Place Position Ind.1 Letter.1 Place.1 Position.1
#   1     1      A    19       23     1        T      33         15
#   2     2      B    19       23     2        T      33         15
#   3     3      B    19       23     3        T      33         15
#   4     4      B    19       23     4        C      33         15
#   5     1      A    19       23     1        C      33         26
#   6     2      B    19       23     2        T      33         26
#   7     3      B    19       23     3        T      33         26
#   8     4      B    19       23     4        C      33         26
#   51    1      B    19       34     1        T      33         15
#   61    2      A    19       34     2        T      33         15
#   71    3      B    19       34     3        T      33         15
#   81    4      B    19       34     4        C      33         15
#   52    1      B    19       34     1        C      33         26
#   62    2      A    19       34     2        T      33         26
#   72    3      B    19       34     3        T      33         26
#   82    4      B    19       34     4        C      33         26
#   9     1      C    19       52     1        T      33         15
#   10    2      T    19       52     2        T      33         15
#   11    3      C    19       52     3        T      33         15
#   12    4      T    19       52     4        C      33         15
#   91    1      C    19       52     1        C      33         26
#   101   2      T    19       52     2        T      33         26
#   111   3      C    19       52     3        T      33         26
#   121   4      T    19       52     4        C      33         26