用字符串中的字母替换数字

Replacing numbers with letters in string

我有一个 ID 列,其名称类似于“155AB3EA157A3466887D8F4B99BABC35”。我想用字母替换这些字符串中的数字。我试过使用 gsub,但它会产生 "invalid text argument" 错误。我的代码如下所示:

as.character(df$ID)
gsub("1", "A", df$ID)

我应该补充一点,我正在使用 ff 包,因为数据非常大。

如果我们将数字 1-9 替换为字母 'A' 到 'I',那么 chartr 是一个选项

chartr('123456789', 'ABCDEFGHI', v1)
#[1] "AEEABCEAAEGACDFFHHGDHFDBIIBABCCE"

更新

刚刚注意到 OP 可能正在使用 ffdf 对象

library(ff)
library(ffbase)

在那种情况下,以常规方式应用函数会导致错误,如 OP 所述

gsub("1", "A", d$v1) 

Error in gsub("1", "A", d$v1) : invalid 'text' argument

因此,我们可以使用 ffbase

中的 with.ffdfwithin.ffdf 等专门提取函数
with.ffdf(d, gsub("1", "A", v1))
#ff (open) integer length=1 (1) levels: A55AB3EAA57A3466887D8F4B99BABC35
#                         [1] 
#A55AB3EAA57A3466887D8F4B99BABC35 

要替换数字 1-9,chartr 可以应用为

d$v1 <- with.ffdf(d, chartr('123456789', 'ABCDEFGHI', v1))
d
#ffdf (all open) dim=c(1,1), dimorder=c(1,2) row.names=NULL
#ffdf virtual mapping
#   PhysicalName VirtualVmode PhysicalVmode  AsIs #VirtualIsMatrix PhysicalIsMatrix PhysicalElementNo #PhysicalFirstCol PhysicalLastCol PhysicalIsOpen
#v1           v1      integer       integer FALSE           FALSE            FALSE                 1                1               #1           TRUE
#ffdf data
#                                v1
#1 AEEABCEAAEGACDFFHHGDHFDBIIBABCCE

数据

v1 <- "155AB3EA157A3466887D8F4B99BABC35"
d <- as.ffdf(data.frame(v1))