我有40000行(SNPs(和500列(人类(的基因数据,看起来像
AA AG GG GA AA
CC CG CC GC GG
AC CC CA CA CC
仅呈现3个SNPs和5个人类的实例。
我需要使用下面提供的键将字母转换为数字。请注意,三个字母A、C和G不能出现在一行中。只有A和C或A和G,或C和G。
如果A出现在行中,关键是:
AA = 0
AG =1
GG = 2
AC = 1
CC = 2
,如果没有显示A,关键是:
CC = 0
CG = 1
GG = 2
请注意,在一种情况下CC是2,而在另一种情况中CC是0。
所以这个例子看起来像:
0 1 2 1 0
0 1 0 1 2
1 2 1 1 2
如何在R中对所有行和列执行此操作?
谢谢!
有很多方法可以解决这个问题,我会先为包含A的行创建一个索引向量,然后使用dplyr
包的recode
函数将替换项应用于不同的行。
# Creating the Matrix
X <- matrix(
c("AA", "AG", "GG", "GA", "AA",
"CC", "CG", "CC", "GC", "GG",
"AC", "CC", "CA", "CA", "CC"), byrow=TRUE, nrow=3)
# Index
index_a <- apply(X, 1, function(i){
any(grepl("A",i))
})
# NA matrix for the result
Y <- matrix(NA_integer_, nrow(X), ncol(X))
# First replacement
Y[index_a, ] <- dplyr::recode(
X[index_a, ],
AA = 0L,
AG = 1L,
GG = 2L,
AC = 1L,
CC = 2L,
GA = 1L,
CA = 1L
)
# Second replacement
Y[!index_a, ] <- dplyr::recode(
X[!index_a, ],
CC = 0L,
CG = 1L,
GG = 2L,
GC = 1L
)