У меня есть набор строковых переменных в моей таблице, которые я хочу перекодировать в конкретные целые числа в зависимости от содержимого их строк.Мой код выглядит следующим образом:
library(tidyverse)
a<-c("this string says apple", "this string says banana", "this string says carrot", "this string says apple")
b<- c("this string says pumpkin", "this string says radish", "this string says eggplant", "this string says radish")
produce <- tibble(a,b)
a_words <- c("apple", "banana", "carrot")
b_words <- c("pumpkin", "radish", "eggplant")
my_function<-function(var,word_vec,num_vec){
for (i in seq_along(word_vec)){
var[grepl(word_vec[[i]],var)]<-num_vec[[i]]
}
return(var)
}
Я могу получить желаемый результат, когда обрабатываю каждую переменную отдельно:
produce$a <- my_function(produce$a,a_words,1:3)
produce$b <- my_function(produce$b,b_words,1:3)
> produce
# A tibble: 4 x 2
a b
<chr> <chr>
1 1 1
2 2 2
3 3 3
4 1 2
Но на самом деле у меня есть несколько переменных для перекодирования (ноне все переменные в тибле).Я попробовал функцию цикла:
for (i in c("produce$a", "produce$b")){
i <- my_function(i, paste0(str_replace(i,"produce$", ""),"_words"), 1:3)
}
Но это не меняет тиббл продукта.
Буду признателен за любые предложения о том, как сделать это более эффективно.