отображение всех векторов без заданного символа (#) - PullRequest
4 голосов
/ 05 октября 2019

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

Ниже приведен код, который вырезает все слова, содержащие знак # и результат этого действия.

tweeter <- c("#tweeter tweet", "h#is", "tweet #tweeter2", "twet")
str_extract_all(tweeter, "(?<=\\B\\#)[^\\s]+")

Результат этого:

[[1]]
[1] "tweeter"

[[2]]
character(0)

[[3]]
[1] "tweeter2"

[[4]]
character(0)

Теперь код, с помощью которого он пытается отобразить все слова без # в начале.

regmatches(tweeter, gregexpr("\\B#\\S+", tweeter), invert = T) 

Я хотел бы отобразить список слов, которые не начинаются с #, просто не знаю, как это правильно написать.

Ответы [ 2 ]

4 голосов
/ 05 октября 2019

Это дает вам слова, которые не начинаются с #

library(stringr)

tweeter[!str_detect(tweeter, "^#")]
# "h#is"            "tweet #tweeter2" "twet"  

Пояснение

str_detect(tweeter, "^#") возвращает логический вектор, основанный на pattern и в этом случае ^#. ^ соответствует началу, а # указывает символ для сопоставления в начале.

Наконец, для возврата значений, когда условие равно TRUE, мы используем tweeter[].

То же самое может быть достигнуто без использования !, который сводит на нет логическое значение, используя аргумент negate в str_detect следующим образом:

tweeter[str_detect(tweeter, "^#", negate = TRUE)]
# "h#is"            "tweet #tweeter2" "twet" 
1 голос
/ 05 октября 2019

В базе R мы можем использовать grep с параметрами invert и value как TRUE.

grep("^#", tweeter, invert = TRUE, value = TRUE)
#[1] "h#is"            "tweet #tweeter2" "twet" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...