Muszę zastąpić ciąg A ciągiem B, tylko gdy ciąg A jest całym wyrazem (np. "MECH"), i nie chcę wykonać zamiennika, gdy A jest częścią dłuższego ciągu (np. "MECHANICZNY"). Do tej pory mam grepl(), który sprawdza, czy ciąg A jest ciągiem całkowitym, ale nie mogę wymyślić, jak dokonać wymiany. Dodałem ifelse() z pomysłem, aby dokonać wymiany gsub(), gdy grep() zwróci TRUE, w przeciwnym razie nie zastąpi. Jakieś sugestie? Zobacz poniższy kod. Dzięki.Wyrażenie regularne do znajdowania i zamiany warunkowo
aa <- data.frame(type = c("CONSTR", "MECH CONSTRUCTION", "MECHANICAL CONSTRUCTION MECH", "MECH CONSTR", "MECHCONSTRUCTION"))
from <- c("MECH", "MECHANICAL", "CONSTR", "CONSTRUCTION")
to <- c("MECHANICAL", "MECHANICAL", "CONSTRUCTION", "CONSTRUCTION")
gsub2 <- function(pattern, replacement, x, ...) {
for(i in 1:length(pattern)){
reg <- paste0("(^", pattern[i], "$)|(^", pattern[i], ")|(", pattern[i], "$)|(", pattern[i], ")")
ifelse(grepl(reg, aa$type),
x <- gsub(pattern[i], replacement[i], x, ...),
aa$type)
}
x
}
aa$title3 <- gsub2(from, to, aa$type)
Zauważyłem w elemencie 5, że nie zastąpił MECH. Czy powinien to mieć? –