Написание определяемой пользователем функции, которая принимает старую строку, ищет столбец фрейма данных и заменяет новой строкой.

У меня есть набор данных blah со столбцом kw. Существуют десятки тысяч строк, некоторые из которых имеют длину предложения. Я уже заменил подавляющее большинство того, что я хочу заменить циклом for, заменив подстроки категориями подстрок. Тем не менее, я не могу думать обо всех подстроках, которые нуждаются в замене - хотя большая часть тяжелой работы уже сделана, есть только большое количество пограничных случаев, и я хочу обрабатывать их по мере их возникновения.

Я хочу создать функцию cleanup, в которой я могу передать ей старую подстроку и новую подстроку, и функция заменит экземпляр старой подстроки в blah$kw на новую подстроку.

Вот что я написал до сих пор:

cleanup <- function(oldstring, 
                    newstring) {
           blah$kw[grepl(oldstring, 
                         blah$kw)] <- sapply(blah$kw[grepl(oldstring, 
                                                           blah$kw)],
                                             function(x) gsub(oldstring,
                                                              newstring, 
                                                              x))
}

Это может выглядеть глупо, я понятия не имею - я совсем новичок в R. Но я основываюсь на найденном мной одноразовом коде, который находится здесь:

blah$kw[grepl(oldstring, 
              blah$kw)] <- sapply(blah$kw[grepl("oldstring", 
                                                 blah$kw)],
                                  function(x) gsub("oldstring",
                                                   "newstring", 
                                                   x))
}

И который работает так же, как шарм. В любом случае, любая помощь будет огромной. Спасибо!


person mowshowitz    schedule 17.05.2017    source источник


Ответы (1)


Обычно рекомендуется не жестко кодировать набор данных для функции и передавать его как переменную. То, что вы ищете, может быть достигнуто с помощью подмножества

cleanup <- function(df1, oldstring, newstring) {
  df1[grepl(oldstring, df1)] <- gsub(oldstring, newstring, df1[grepl(oldstring, df1)])
  df1
}

blah$bw <- cleanup(blah$bw, "a", "y")

Примечание: это не будет работать, если ваши строки хранятся как факторы

person manotheshark    schedule 17.05.2017
comment
Спасибо, чувак, похоже, это прекрасно покроет это! И спасибо за подсказку о не жестком кодировании. - person mowshowitz; 18.05.2017