在数字矩阵中转换 snp 基因型的数据框

Convert data frame of snp genotypes in numeric matrix

snp1 <- c("AA", "AT", "AA", "TT", "AA", "AT", "AA", "AA", "AA", "AT")
snp2 <- c("GG", "GC", "GG", "CC", "CC", "GC", "GG", "GG", "GG", "GC")
df1 <- data.frame(snp1, snp2)

num1 <- c(1, 2, 1, 3, 1, 2, 1, 1, 1, 2)
num2 <- c(1, 2, 1, 3, 3, 2, 1, 1, 1, 2)
df2 <- data.frame(num1, num2)

这是在 R 中完成的。我有一个对象 df1,我想将其转换为 df2。对于 df1 中的每一列,最常见的值转换为 1,第二常见的值转换为 2,依此类推。我如何有效地做到这一点?

主题变化:

lapply(df1, function(x) match(x, levels(x)[order(-table(x))]) )
#$snp1
# [1] 1 2 1 3 1 2 1 1 1 2
#
#$snp2
# [1] 1 2 1 3 3 2 1 1 1 2