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

时间:2017-03-18 11:09:27

标签: r gsub ff

我有一个名为“155AB3EA157A3466887D8F4B99BABC35”的ID列。我想用字母替换这些字符串中的数字。我已尝试使用gsub,但它会产生“无效的文本参数”错误。我的代码如下所示:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

更新

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

library(ff)
library(ffbase)

在这种情况下,以常规方式应用函数会导致错误,如提到的OP

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

gsub中的错误(“1”,“A”,d $ v1):无效的'text'参数

因此,我们可以使用with.ffdf

中的within.ffdfffbase等专门的提取函数
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))