Как использовать несколько условий для регулярного выражения, используя ifelse? - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь извлечь и заменить «?» В столбце клиента, если он соответствует group = SA с «AWS» в качестве клиента вместо «?». Вот '?'может быть '?'или же '?????'или же ??. Однако, похоже, не работает. Может кто-нибудь помочь по этому вопросу? Я использую R

Спасибо

test[,Client:=ifelse(Group=='SA'&Client==grepl('\\?+',Client,perl = T),'AWS',Client)]

пример данных

client<-c('?','???','????')
GROUP<-c('SA','SA','SA')
df <- melt(data.frame(client,GROUP))

конечный результат должен выглядеть как

Client GROUP
AWS     SA

1 Ответ

3 голосов
/ 18 октября 2019

Кажется, вы смешиваете синтаксис data.table с фреймами данных. data.table используется следующим образом:

DT[i, j, by] 

Чтобы заменить значения из подмножества data.table, сначала объявите свое подмножество в i, затем оперируйте столбцами в j. Сначала вы хотите выбрать все строки, где GROUP == "SA", а затем заменить одну или несколько ? на AWS, если я правильно понял вашу проблему.

library(data.table)
library(stringr)

client<-c('?','???','????')
GROUP<-c('SA','SA','SA')
dt <- data.table(client,GROUP)

dt[GROUP == "SA", client := str_replace(client, "\\?+", "AWS")]
#    client GROUP
# 1:    AWS    SA
# 2:    AWS    SA
# 3:    AWS    SA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...