必须指定位数,并且必须有条件触发
目标: 将字符串中的第三位替换为“4”,条件为 TYPE“^JJ”
# 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"]
我们有一个简单的方法来实现它吗?
最佳答案
从 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")]
关于r - 如何根据条件将字符串的特定数字替换为另一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512375/