Изменение шаблона, который встречается несколько раз в строке в R

У меня есть датафрейм с одним столбцом, где каждая строка представляет часть оператора выбора SQL, например, ниже:

test <-
  bind_rows(
    data.frame(text = "spend_1 + spend_2", stringsAsFactors = FALSE),
    data.frame(text = "spend_1 + spend_2 + spend_3", stringsAsFactors = FALSE),
    data.frame(text = "spend_2 - spend_3", stringsAsFactors = FALSE)
  )

print(test)

Source: local data frame [3 x 1]

                         text
                        (chr)
1           spend_1 + spend_2
2 spend_1 + spend_2 + spend_3
3           spend_2 - spend_3

Я хотел бы, для каждого случая \w+Добавьте псевдоним таблицы в переменную. Например:

                         text   text_adj

1           spend_1 + spend_2   a.spend_1 + a.spend_2   
2 spend_1 + spend_2 + spend_3   a.spend_1 + a.spend_2 + a.spend_3
3           spend_2 - spend_3   a.spend_2 - a.spend_3

С помощью str_replace Я могу заменить каждую переменную на "некоторый текст", но я не могу понять, как я могу затем заменить каждый экземпляр псевдонимом + исходный текст переменной

library(stringr)

str_replace_all(text, "\\w+", "some text")

1 ответ

Решение

Вам просто нужно захватить образец и сослаться на него \\1, Например,

test %>%
    mutate(., text2 = str_replace_all(text, "(\\w+)", "alias.\\1"))
# Source: local data frame [3 x 2]
# 
#                          text                                         text2
#                         (chr)                                         (chr)
# 1           spend_1 + spend_2                 alias.spend_1 + alias.spend_2
# 2 spend_1 + spend_2 + spend_3 alias.spend_1 + alias.spend_2 + alias.spend_3
# 3           spend_2 - spend_3                 alias.spend_2 - alias.spend_3
Другие вопросы по тегам