将字母转换为整个数据帧中的数字

ykl*_*ykl 4 r dataframe

我无法chartr()在我的数据框的所有列上应用该函数以将字母转换为数字.

我在单列上管理它,但我希望能够在整个数据框上完成它.以下是我的数据示例:

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)

  ID POS1 POS2 POS3 POS1X
1  1   AG   GT   GG    13
2  2   GC   CC   CT    32
3  3   TT   TC   AT    44
Run Code Online (Sandbox Code Playgroud)

从代码中可以看出,我希望将A转换为1,将C转换为2,将G转换为3,将T转换为4.我有40多列,因此重复上述相同的命令40次以上将是不切实际的(特别是如果我比如说数百列,遇到同样的问题

ykl

Ric*_*ven 8

为什么不用lapply

DF2 <- DF ## to not overwrite the original DF
DF2[-1] <- lapply(DF2[-1], chartr, old = "ACGT", new = "1234")
DF2
#   ID POS1 POS2 POS3
# 1  1   13   34   33
# 2  2   32   22   24
# 3  3   44   42   14
Run Code Online (Sandbox Code Playgroud)

现在你有两个具有相同列名的数据框,我觉得比将新列附加到旧数据更容易比较.特别是当有很多列时.