Это будет работать, если вы возьмете его из 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")]