我有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
答案 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)