Используйте gsub для удаления шаблона из строки: аргумент 'pattern' имеет длину> 1, и будет использоваться только первый элемент - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь удалить шаблон из строки с помощью gsub из следующего массива chr

articles<-c("RT @name1: hello world", "@nickname1: bye bye guys", 
"RT @name2_surname2: I have no text", "Hello!")

Шаблон формируется с помощью терминов между @ и : только в строках, которые начать с RT. Следовательно, в нашем случае шаблон имеет вид:

 "name1"    "name2_surname2"

Шаблон можно получить с помощью

pat <- "^RT.*?@(.*?):.*"
res <- gsub(pat,"\\1",articles[grepl(pat,articles)])

. После удаления этого шаблона желаемый результат будет таким:

"RT : hello world", "@nickname1: bye bye guys", 
"RT : I have no text", "Hello!"

В любом случае, когда я использую:

gsub(res,"",articles)

Я получаю неправильный результат:

[1] "RT @: hello world"                  "@nick: bye bye guys"               
[3] "RT @name2_surname2: I have no text" "Hello!"                            
Warning message:
In gsub(res, "", articles) :
  argument 'pattern' has length > 1 and only the first element will be used

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Если желаемый результат, как указано, это:

"RT : hello world", "@nickname1: bye bye guys", "RT : I have no text", "Hello!"

, тогда это решение работает:

Сначала вам нужно изменить шаблон, чтобы включить в захват @ group:

pat <- "^RT.*?(@.*?):.*"
res <- gsub(pat,"\\1",articles[grepl(pat,articles)])

Затем, как предлагает @Akrun, вы можете вставить два векторных элемента res вместе, что позволяет использовать его как (одиночный) шаблон:

gsub(paste0(res, collapse = "|"), "", articles)

Это даст вам отключенный выход.

0 голосов
/ 16 марта 2020

Мы можем paste шаблонов в одну строку и использовать его в шаблоне gsub в качестве аргумента pattern не векторизовано, т. Е. Требуется только длина 1

gsub(paste0("\\b(", paste(res, collapse="|"),  ")\\b"), "", articles)
#[1] "RT @: hello world"        "@nickname1: bye bye guys" "RT @: I have no text"     "Hello!"      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...