условное str_replace, основанное на сопоставлении регулярного выражения в mutate? - PullRequest
2 голосов
/ 20 сентября 2019

Для любых записей в столбце «район», которые соответствуют regex("[:alpha:]{2}AL"), я хотел бы заменить «AL» на «01».

Например:

df <- tibble(district = c("NY14", "MT01", "MTAL", "PA10", "KS02", "NDAL", "ND01", "AL02", "AL01"))

Я пробовал:

  df %>% mutate(district=replace(district, 
                          str_detect(district, regex("[:alpha:]{2}AL")), 
                          str_replace(district,"AL","01"))) 

и

  df %>% mutate(district=replace(district, 
                          str_detect(district, regex("[:alpha:]{2}AL")), 
                          paste(str_sub(district, start = 1, end = 2),"01",sep = "")) 

, но существует проблема векторизации.

Ответы [ 2 ]

3 голосов
/ 20 сентября 2019

Это нормально?

str_replace_all(string=df$district,
                pattern="(\\w{2})AL",
                replacement="\\101")

Я заменил регулярное выражение на \\w, символ слова: https://www.regular -expressions.info / shorthand.html

Я использую \\1, чтобы указать, заменить строку на первую захваченную область, которая захвачена в (\\w{2}), поэтому оставьте первые 2 буквы, а затем добавьте 01

1 голос
/ 20 сентября 2019

Вы можете изменить replace на ifelse

ifelse( str_detect(df$district, regex("[:alpha:]{2}AL")), 
         str_replace(df$district,"AL","01"),df$district)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...