Заменить части текстовых значений таблицей подстановки?

#r #dplyr #replace #lapply #gsub

Вопрос:

Как бы я заменил часть значений (вопрос в df1) в соответствии с таблицей поиска (новый текст в именах), которая будет выглядеть так, как в df2. Я предполагаю, что lapplpy с gsub справится с этой задачей, но не могу понять синтаксис!

 set.seed(42)
df1 <- data.frame(question = c("Hello - a", "Hello - b", "Goodbye - a", "Goodbye - b"),
                  variable = rnorm(4))

df1
     question   variable
1   Hello - a  1.3709584
2   Hello - b -0.5646982
3 Goodbye - a  0.3631284
4 Goodbye - b  0.6328626


names <- data.frame(text = c("Hello", "Goodbye", "Good Morning"),
                    new.text = c("1", "2", "3"))

names
          text new.text
1        Hello        1
2     Goodbye         2
3 Good Morning        3


set.seed(42)
df2 <- data.frame(question = c("1 - a", "1 - b", "2 - a", "2 - b"),
                  variable = rnorm(4))

df2
  question   variable
1    1 - a  1.3709584
2    1 - b -0.5646982
3    2 - a  0.3631284
4    2 - b  0.6328626

 

Комментарии:

1. Не могли бы вы привести пример того, как вы хотите, чтобы результат выглядел? Кроме того, ваша печать df1 вверху, похоже, не имеет правильных значений для столбца «вопрос», в зависимости от того, как вы его определили.

2. Извините, скопировал неправильный df поперек — теперь это должно иметь смысл?

Ответ №1:

Воспользуйся stringr::str_replace_all

 df1$question <- stringr::str_replace_all(df1$question, 
                   setNames(names$new.text, names$text))
df1

#  question   variable
#1    1 - a  1.3709584
#2    1 - b -0.5646982
#3    2 - a  0.3631284
#4    2 - b  0.6328626