【问题标题】:Changing (convert) letters (string) to numbers using R [duplicate]使用 R 将字母(字符串)更改(转换)为数字
【发布时间】:2015-09-30 21:02:47
【问题描述】:

我正在尝试将 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", .)))

chartr("AA", "0", c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L)) 中的错误: “旧”比“新”长

我尝试将代码编辑为:

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

【问题讨论】:

  • 我认为您想要的结果有错误,因为S2 的第 4 行将是 AG == 2 vs 1

标签: r string numerical


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多