Tenho dois dataframes:
pesquisa df:
oldId <- c(123, 456, 567, 789)
newId <- c(1, 2, 3, 4)
lookup <- data.frame(oldId, newId)
dados df:
descr <- c("description with no match",
+ "description with one 123 match",
+ "description with again no match",
+ "description 456 with two 789 matches")
Meta:
Quero um novo dataframe:
- mesma estrutura que os dados df
- mesmos valores de campo, exceto que todas as instâncias de números (ou seja, 123, 456, 789) são pesquisadas no outro dataframe e substituídas por lookup$newId.
O dataframe resultante ficará assim:
- "descrição sem correspondência"
- "descrição com uma correspondência"
- "descrição sem correspondência novamente"
- "descrição 2 com duas 4 correspondências"
Portanto, cada texto na coluna descr pode conter uma grande quantidade de números que precisam ser substituídos. Claro, este é um exemplo simplificado; meus dataframes da vida real são muito maiores.
Eu corrigi a parte regex:
fx <- function(x) {gsub("([[:digit:]]{3})", "TESTTEST", x)}
data$descr <- lapply(data$descr, fx)
Mas não tenho ideia de como deixar a função percorrer todas as correspondências em uma linha e, então, procurar o número e substituí-lo.