2016-03-31 9 views
1

Ich habe einen Datenrahmen mit einer Spalte auftritt, wobei jede Zeile unter Teil einer SQL-Anweisung SELECT zum Beispiel repräsentiert:Ändern ein Muster, das mehrfach in einer Zeichenkette in R

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 

Ich mag würde, Fügen Sie für jede Instanz von \w+ den Tabellenalias der Variablen hinzu. Zum Beispiel:

      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 Verwendung Ich kann jede Variable mit „etwas Text“ ersetzen, aber ich kann nicht herausfinden, wie kann ich dann jede Instanz mit dem Alias ​​ersetzen + ursprünglichem variablen Text

library(stringr) 

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

Antwort

2

Sie müssen nur das Muster erfassen und es mit \\1 referenzieren. Zum Beispiel

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 
Verwandte Themen