我正在尝试将AA,GG,GA等字母(基因型)对转换为数值。所以例如我想要AA = 0,GG = 1,AG = 2,CC = 3,TT = 4等。我的数据样本如下:
S1 S2 S3
AA CC AA
AA GG TT
AA CC GG
AA AG AA
我一直在尝试在dplyr包中使用mutate函数,但我有点卡住了。
我运行的代码给出了一个错误:
DF1 <- DF %>% mutate_each(funs(chartr("AA", "0", .)))
章程中的错误(&#34; AA&#34;,&#34; 0&#34;,c(1L,1L,1L,1L,1L,2L,2L,2L,1L)): &#39;老&#39;比新的&#39;
更长
我尝试将代码编辑为:
DF1 <- DF %>% mutate_each(funs(chartr("AA", "00", .)))
这给了我下面的结果,但它仍然不是我想要它做的。有人可以帮我解决一些如何处理它的想法吗?
S1 S2 S3
1 00 CC 00
2 00 GG TT
3 00 CC GG
4 00 0G 00
我想要的结果是:
S1 S2 S3
1 0 3 0
2 0 1 4
3 0 3 1
4 0 1 0
答案 0 :(得分:1)
dat <- read.table(text="S1 S2 S3
AA CC AA
AA GG TT
AA CC GG
AA AG AA", header=TRUE, stringsAsFactors=FALSE)
假设有限的翻译表:
xlate <- c(AA = 0, GG = 1, AG = 2, CC = 3, TT = 4)
dat[] <- lapply(dat, function(x) { xlate[x] })
dat
## S1 S2 S3
## 1 0 3 0
## 2 0 1 4
## 3 0 3 1
## 4 0 2 0