Использование stringr :: str_replace_all с символьным вектором - PullRequest
0 голосов
/ 31 августа 2018

str_replace_all из пакета stringr позволяет сделать несколько замен, передав именованный вектор в аргумент replacement=.

library(stringr)
charz <- data.frame(a = c('A', 'B'), stringsAsFactors = F)

# Works fine
str_replace_all('ABC', c('A' = '1', 'B' = 2))
[1] "12C" 

Как я могу сделать это со значениями из фрейма данных, а не с пустыми символами?

# Does not work
# Should return "12C" as above

str_replace_all('ABC', c(charz$a[1] = '1', charz$a[2] = 2)) 
Error: unexpected '=' in "str_replace_all('ABC', c(charz$a[1] ="

str_replace_all('ABC', c(charz$a[1], charz$a[2]), c('1', '2'))
[1] "1BC" "A2C"

1 Ответ

0 голосов
/ 31 августа 2018

На странице справки для функции:

Если вы хотите применить несколько шаблонов и замен к одной и той же строке, передайте именованный вектор в шаблон.

Я не уверен, почему вы не можете обратиться к df$var, чтобы назвать вектор на лету, но, надеюсь, сделать это до использования str_replace_all() в вашем случае вполне реально.

vec <- c("1", "2")
names(vec) <- charz$a

str_replace_all("ABC", vec)
> [1] "12C"
...