【问题标题】:All possible unique pair combinations of gamete positions配子位置的所有可能的独特配对组合
【发布时间】:2018-05-20 17:03:07
【问题描述】:

我有一些配子数据,格式如下:

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 进行组合,因为这似乎与我想要的非常接近。但是,当我需要 data$Position 的所有组合时,我会丢失 Ind、Letter 和 Place 的信息。输出还包括非唯一对。

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

【问题讨论】:

  • 能否请您输入您拥有的数据框。我建议您为配对的地点创建一个密钥,然后进行交叉连接。
  • 我不确定如何输入数据。我假设你想要这个,所以你可以导入数据,对吗?我的数据为 .csv,但我不知道如何将其附加到问题中。
  • 抱歉,我不清楚:我可以执行 dput 功能,但我不确定如何处理生成的文件。我只是将其粘贴到我的问题中还是需要以某种方式附加为文件?
  • @Hjalte 把它粘贴进去
  • 这是Four-Gamete-Test in R 的副本吗?如果没有,你能告诉我们它有什么不同吗?

标签: r combinations bioinformatics


【解决方案1】:

您可以使用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])]]  )
  })
)[,]

结果:

#       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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多