使用R对具有不均匀行和不同索引的数据进行排序

时间:2018-01-23 03:42:53

标签: r

我有4组人口数据,每组已经为各种标记打字,有些标记对所有组都是共同的,有些是每组独有的,有些标记是缺失的,有些标记可能只在某些组中被观察到例如,4组中只有2组携带特定标记。如何对4组数据进行排序以生成一个大表,显示每个群体的所有标记的频率。例如:

  Group1          Group2          Group3          Group4

  SNP   Fq        SNP  Fq         SNP   Fq        SNP  Fq
  11G1 0.00136    11G1 0.00122    20X3  0.00100   11G1 0.00120
  15T1 0.00136    15T9 0.00150    11A4  0.00150   15T1 0.00120
  15Y9 0.00136    15Y8 0.00200    12R1  0.00210   15Y9 0.00120
  15P7 0.00270    1597 0.00290    12R2  0.00260   15P7 0.00150
  15G1 0.00270    19U7 0.00300    12R3  0.00300   19U7 0.00250
  15Q7 0.00408    19P4 0.00350    13D4  0.00330   19P4 0.00350
  15U8 0.00410    20X3 0.00400    22W1  0.00341   22Y7 0.00550
  16E9 0.00680    22T2 0.00410    16E9  0.00540
  16T4 0.00700    22Y7 0.00600
                  22Y8 0.00660

我想生成这样的输出文件:

        Group1     Group2     Group3    Group4
  SNP   Fq         Fq         Fq         Fq
  11A4  0          0          0.00150    0
  11G1  0.00136    0.00122    0          0.00120
  12R1  0          0          0.00210    0
  12R2  0          0          0.00260    0
  12R3  0          0          0.00300    0
  13D4  0          0          0.00330    0
  15T1  0.00136    0          0          0.00120
  15T9  0          0.00150    0          0
  15Y8  0          0.00200    0          0
  15Y9  0.00136    0          0          0.00120
  15P57 0          0.00290    0          0
  15P7 0.00270     0          0          0.00150
  15G1 0.00270     0          0          0.00250
  15Q7 0.00408     0          0          0
  15U8 0.00410     0          0          0
  16E9 0.00680     0          0.00540    0
  16T4 0.00700     0          0          0
  19U7 0           0.00300    0          0
  19P4 0           0.00350    0          0.00350
  20X3 0           0.00400    0          0
  22T2 0           0.00410    0          0   
  22Y7 0           0.00600    0          0.00550
  22W1 0           0          0.00341    0

1 个答案:

答案 0 :(得分:2)

您可以使用xtabs执行此操作:

alldat <- do.call(rbind, list(Group1, Group2, Group3, Group4))
as.data.frame.matrix(xtabs(Fq ~ SNP + Group, alldat))

数据:

Group1 <- read.table(text="Group SNP   Fq    
1 11G1 0.00136
1 15T1 0.00136
1 15Y9 0.00136
1 15P7 0.00270
1 15G1 0.00270
1 15Q7 0.00408
1 15U8 0.00410
1 16E9 0.00680
1 16T4 0.00700", header=TRUE)

Group2 <- read.table(text="Group SNP  Fq     
2 11G1 0.00122
2 15T9 0.00150
2 15Y8 0.00200
2 1597 0.00290
2 19U7 0.00300
2 19P4 0.00350
2 20X3 0.00400
2 22T2 0.00410
2 22Y7 0.00600
2 22Y8 0.00660", header=TRUE)

Group3 <- read.table(text="Group SNP   Fq     
3 20X3  0.00100
3 11A4  0.00150
3 12R1  0.00210
3 12R2  0.00260
3 12R3  0.00300
3 13D4  0.00330
3 22W1  0.00341
3 16E9  0.00540", header=TRUE)

Group4 <- read.table(text="Group SNP  Fq
4 11G1 0.00120
4 15T1 0.00120
4 15Y9 0.00120
4 15P7 0.00150
4 19U7 0.00250
4 19P4 0.00350
4 22Y7 0.00550", header=TRUE)