使用R将字母(字符串)更改(转换)为数字

时间:2015-09-30 21:02:47

标签: r string numerical

我正在尝试将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

1 个答案:

答案 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