配子位置的所有可能独特的配对组合

时间:2015-03-10 13:55:27

标签: r combinations bioinformatics

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

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。 我想这样做的原因是因为我想对两对进行四配对测试,看看是否存在所有可能的Letter组合。所以例如对于上面的最后一个组合对,我们有字母对CC,TT,CT,TC,所以这个组合对将通过FGT。

我试图与expand.grid结合使用,因为它似乎与我想要的非常接近。但是,当我需要所有数据组合$ Position时,我会丢失Ind,Letter和Place的信息。输出还包括非唯一对。

有人能指出我的工具,那更接近我想要的吗?或者给我一些关于如何修改expand.grid的指导,以获得我需要的东西。 如果你知道一个工具,实际上是四游戏测试,或类似的东西,那么我当然也很有趣。

1 个答案:

答案 0 :(得分:2)

您可以expand.grid使用Position,但不能直接使用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])]] ) }) )[,] 列。我们的想法是找到&#34;四重奏的所有组合&#34; (独特职位):

#       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

结果:

{{1}}