我在应用 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
从代码中可以看出,我想将 A 转换为 1,C 转换为 2,G 转换为 3,T 转换为 4。我有 40 多列,因此重复上述相同的命令 40 多次是不切实际的(特别是如果我稍后遇到同样的问题,比如数百列)
真诚的,
ykl
最佳答案
为什么不使用 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
现在您有两个具有等效列名的数据框,我发现它们比将新列附加到旧数据更容易进行比较。特别是当有很多很多列时。
关于r - 将整个数据框中的字母转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661170/