Как заменить одну строку слова в несколько строк?
У меня есть фрейм данных некоторых строк. В некоторых строках есть одно слово, которое я хочу заменить пустым. Я могу получить слово, но во время замены я получаю предупреждение
Предупреждение: в gsub(pattern = text[lengths(gregexpr("[[:alpha:]]+", text)) ==: аргумент 'pattern' имеет длину> 1, и будет использоваться только первый элемент
Только первое слово получает замену, а остальное остается таким, как есть. Я хочу заменить все отдельные слова во фрейме данных.
Код, который я использую, как показано ниже.
text <- c("Because I could not stop for Death -",
"Word1",
"He kindly stopped for me -",
"Word2",
"The Carriage held but just Ourselves - ",
"word3",
"and Immortality")
gsub(pattern = text[lengths(gregexpr("[[:alpha:]]+", text)) == 1], "", text)
Я ожидаю ниже выхода.
"Because I could not stop for Death -",
"He kindly stopped for me -",
"The Carriage held but just Ourselves - ",
"and Immortality"
3 ответа
Простое логическое индексирование поможет вам, так как слова, которые вы хотите сохранить, находятся в позициях 1, 3, 5, ... и т. Д., Т.е.
text[c(TRUE, FALSE)]
#[1] "Because I could not stop for Death -" "He kindly stopped for me -"
#[3] "The Carriage held but just Ourselves - " "and Immortality"
a=gsub("^\\w+$","",text)
[1] "Because I could not stop for Death -" ""
[3] "He kindly stopped for me -" ""
[5] "The Carriage held but just Ourselves - " ""
[7] "and Immortality"
grep("\\w",a,value = T)
[1] "Because I could not stop for Death -" "He kindly stopped for me -"
[3] "The Carriage held but just Ourselves - " "and Immortality"
или вы можете просто сделать
grep("\\w+\\s",text,value = T)
[1] "Because I could not stop for Death -" "He kindly stopped for me -"
[3] "The Carriage held but just Ourselves - " "and Immortality"
Не могли бы вы попробовать и дайте мне знать, если это поможет вам.
text <- c("Because I could not stop for Death -",
"Word1",
"He kindly stopped for me -",
"Word2",
"The Carriage held but just Ourselves - ",
"word3",
"and Immortality")
код для получения требуемого вывода OP:
text[!grepl("[Ww]ord[0-9]+", text)]
Вывод будет следующим.
[1] "Because I could not stop for Death -" "He kindly stopped for me -"
[3] "The Carriage held but just Ourselves - " "and Immortality"
За grepl
со страницы справки:
grepl возвращает логический вектор (соответствует или нет для каждого элемента x).