更改在 R 中的字符串中多次出现的模式
Changing a pattern that occurs multiple times in a string in R
我有一个包含一列的数据框,其中每一行代表 sql select 语句的一部分,例如:
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+
实例添加 table 别名到变量。例如:
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
我可以用 "some text" 替换每个变量,但我不知道如何用别名 + 原始变量文本
替换每个实例
library(stringr)
str_replace_all(text, "\w+", "some text")
您只需要捕获模式并用 \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
我有一个包含一列的数据框,其中每一行代表 sql select 语句的一部分,例如:
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+
实例添加 table 别名到变量。例如:
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
我可以用 "some text" 替换每个变量,但我不知道如何用别名 + 原始变量文本
library(stringr)
str_replace_all(text, "\w+", "some text")
您只需要捕获模式并用 \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