#r
Вопрос:
b lt;- c("books", " ", "animals", "frogs") #My code: b[!grepl("^\s $", b)] [1] "books" "animals" "frogs" #Now, I am working to figure out this solution with stringr package. str_remove_all(b, "^\s $") [1] "books" "" "animals" "frogs"
Вывод показывает ""
, где происходит сбой моего нового кода. Любое решение для получения результата, подобного моему первому коду?
Комментарии:
1.
b[nzchar(trimws(b))]
Ответ №1:
Мы можем использовать str_subset
в stringr
library(stringr) str_subset(b, "^\s $", negate = TRUE) [1] "books" "animals" "frogs"
Функция, которая соответствует grepl
, является str_detect
b[str_detect(b, "^\s $", negate = TRUE)] [1] "books" "animals" "frogs"
В base R
, мы можем использовать grep
с invert = TRUE
grep("^\s $", b, invert = TRUE, value = TRUE) [1] "books" "animals" "frogs"
Или без регулярного выражения с trimws
(чтобы удалить пробелы, ведущие/отстающие) и использовать nzhcar
для создания логического вектора для подмножества
b[nzchar(trimws(b))] [1] "books" "animals" "frogs"
Ответ №2:
Две базовые альтернативы R:
b[nzchar(trimws(b))] # [1] "books" "animals" "frogs" b[grepl("\S",b)] # [1] "books" "animals" "frogs"
Ответ №3:
В base R
мы можем сделать:
b[b !=" "]
Выход:
[1] "books" "animals" "frogs"
ИЛИ с stringr
:
library(stringr) str_subset(str_squish(b), "")
[1] "books" "animals" "frogs"