Как заменить конкретные цифры строки в другое значение с условиями - PullRequest
2 голосов
/ 04 апреля 2019

Укажите количество цифр, которое необходимо , и должны вызывать это с условием

Цель: заменить 3-е место в строке на "4" с условием в ТИПЕ "^ 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"]

У нас есть простой способ достичь этого?

1 Ответ

3 голосов
/ 04 апреля 2019

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