2016-02-12 2 views
0

Это довольно сложно объяснить, поэтому, пожалуйста, несите меня.Как использовать gsub для списка нескольких шаблонов в R

Я хотел бы сделать «найти/заменить», используя список строк, чтобы «найти» и пустую строку («») для замены. У меня есть столбец с большой таблицей данных, в которой я бы хотел найти это.

Использование базы R, я не могу понять, как использовать список шаблонов в gsub.

Я сделал цикл, но если кто-то может помочь мне разобраться, как использовать одну из применяемых функций (или что-то еще в базовом R), это было бы намного эффективнее, и я был бы очень признателен.

Это работает, но занимает так много времени:

for(i in 1:GarbMax){ 
     Table.All$Cleaned<-gsub(garbage[i], "", Table.All$Cleaned, ignore.case = TRUE, fixed = TRUE) 
} 

Список значений Я хотел бы найти в «мусора», поле я ищу для них в это «Table.All $ Убирали». «GarbMax» - это максимальное значение списка «мусор».

Как в стороне (возможно), приведенный выше код дает мне предупреждение, что ignore.case = TRUE игнорируется. Любая идея почему?

Большое вам спасибо за помощь!

+0

Вы, вероятно, следует сделать воспроизводимый пример. Мое предположение: сделайте единственную find-replace на 'paste (garbage, collapse =" | ")' – Frank

+0

Как [this] (http://stackoverflow.com/a/35235271/4497050), но вынимайте регулярное выражение и используйте '' '' для всех заменяющих строк. – alistaire

ответ

2

Если я правильно понимаю, следующее решение будет один способ идти о:

string <- c("onetwo", "two", "three", "fourfive", "five", "six", "sixseven") 
find.list <- list("two", "five", "seven") 
# in REGEX, | also represents "OR" 
find.string <- paste(unlist(find.list), collapse = "|") 

gsub(find.string, replacement = "", x = string) 
[1] "one" ""  "three" "four" ""  "six" "six" 
+0

Хороший шанс, что «список» OP является строковым вектором, я считаю. – Frank

Смежные вопросы