在整个数据框中将字母转换为数字 [英] Converting letters to numbers in entire dataframe
问题描述
我无法在数据框的所有列上应用 chartr()
函数来将字母转换为数字。
I am having trouble applying the chartr()
function on all columns of my data frame for converting letters to numbers.
我设法在单列上执行此操作,但是我希望能够在整个数据帧上执行此操作。这是我的数据示例:
I managed doing it on single columns, yet I want to be able to do it on the entire data frame. Here is an example of my data:
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次以上的相同命令将是不切实际的(特别是如果以后在遇到类似问题时说几百列)
As seen from the code, I want to convert A to 1, C to 2, G to 3, and T to 4. I have 40+ columns and thus repeating the same command as above 40+ times would be impractical (especially if I run into the same problem later on with say hundreds of columns)
ykl
Sincerily, 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
现在您有两个具有相同列名的数据框,与将新列附加到旧数据相比,我发现比较起来比较容易。尤其是当列很多时。
Now you have two data frames with equivalent column names which I find easier to compare than appending new columns to the old data. Especially when there are many many columns.
这篇关于在整个数据框中将字母转换为数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!