К сожалению, я опоздал, и с решением, похожим на @ Andrie, вот так:
dat <- matrix(c(3,3,3,2,3,3,3,3,3,3,3,3,2,3,1,2,2,2,3,3),
nr=10, byrow=TRUE)
# here is our lookup table for genotypes
pat <- matrix(1:9, nr=3, byrow=T, dimnames=list(1:3,1:3))
Тогда
> pat[dat]
[1] 9 8 9 9 9 9 6 2 5 9
даст вам то, что вы хотите.
Однако я хотел бы сказать, что вам может быть проще использовать специальный пакет для генетических исследований, например, тот, который можно найти на CRAN (например, genetics
, gap
или SNPassoc
,несколько) или Bioconductor , потому что они включают средства для преобразования / записи данных генотипа и работы с гаплотипом.
Вот пример того, что я имею в виду с приведенным выше замечанием:
> library(genetics)
> geno1 <- as.genotype.allele.count(dat[,1]-1)
> geno2 <- as.genotype.allele.count(dat[,2]-1)
> table(geno1, geno2)
geno2
geno1 A/A A/B
A/A 6 1
A/B 1 1
B/B 0 1