指定数字位数为必填项,并且必须以条件触发此操作
目标: 用类型“ ^ 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"]
我们有一种简单的方法来实现它吗?
答案 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")]