我找到了下面的代码。它运行良好,但当您涉及完整的字母表时更容易出错。
ID = c(1,2,3)
POS1 = c('AG','GC','TT')
POS2 = c('GT','CC','TC')
POS3 = c('GG','CT','AT')
DF = data.frame(ID,POS1,POS2,POS3)
DF$POS1X <- chartr('ACGT','1234',DF$POS1)
但是寻找不需要在代码中输入所有字母和数字的东西?让我们使用相同的数据框,我所追求的是一个循环,它将“a”转换为 1,“b”转换为 2 等等......
更新:为了不创建另一列而只修改现有的 POS1,我在下面尝试过。我没有为你工作。
ID = c(1,2,3)
POS1 = c('AG','GC','TT')
POS2 = c('GT','CC','TC')
POS3 = c('GG','CT','AT')
DF = data.frame(ID,POS1,POS2,POS3)
只是将因素更改为 POS1 的字符
DF$POS1 <- as.character(as.factor(DF$POS1))
map<-data.frame(LETTERS,as.character(1:26))
names(map)<-c("letters","numbers")
let2nums <- function(string){
splitme <- unlist(strsplit(string,""))
returnme <- as.integer(map[map$letters %in% splitme,]$numbers)
return(as.numeric(returnme))
}
DF$POS1 <- mapply(let2nums, DF$POS1)
oucome 是相当有趣的 :) 知道为什么吗?