如何用条件将字符串的特定数字替换为另一个值

时间:2019-04-04 09:26:47

标签: r replace data.table

指定数字位数为必填项,并且必须以条件触发此操作

目标: 用类型“ ^ JJ”中的条件将字符串中的第三位替换为“ 4”

# DT
DT <- data.table(TYPE = c("AA","JJ","JJ","BB"),CODE = c("Y008h556","Y008j576","Y008l554","Y008z546")) 

# My attempt but not work
DT[grepl("^JJ",TYPE),CODE:=substring(CODE,3,3)<-"4"]

我们有一种简单的方法来实现它吗?

1 个答案:

答案 0 :(得分:3)

如果您采用data.table语法,它将可以使用

substring(DT$CODE[grepl("^JJ",DT$TYPE)], 3, 3) <- "4"

DT
#   TYPE     CODE
#1:   AA Y008h556
#2:   JJ Y048j576
#3:   JJ Y048l554
#4:   BB Y008z546

我不太确定为什么它不能在data.table语法中起作用,但是我认为这是因为我们正在做CODE:=substring <- ...,而substring希望它采用以下形式substring <- ...


如果我们想使用data.table语法,可以使用sub

DT[grepl("^JJ",TYPE),CODE:=sub("(.{2}).", "\\14", CODE)]

DT
#   TYPE     CODE
#1:   AA Y008h556
#2:   JJ Y048j576
#3:   JJ Y048l554
#4:   BB Y008z546

@Frank和@ chinsoon12在评论中建议,使用substring的其他方法是

DT[, CODE := {substring(CODE, 3, 3) <- "4"; CODE}]

DT[, CODE := `substring<-`(CODE, 3, 3, "4")]