Возвращает начало строки длиной до двух символов - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть символьный вектор, который выглядит следующим образом:

a <- c("Bob/7", "What is this?", "Seventeen")

Я хочу извлечь начало строки до , включая либо косую черту (/), либопробел ().Результат должен выглядеть примерно так:

b
[1] "Bob/"  "What " NA 

Несоответствующие элементы также могут быть пустыми строками или отбрасываться вместо возврата NA.

Я пробовал с grep("^.+?[/ ]", a, value = TRUE),но это возвращает соответствующие элементы вместо соответствующих подстрок.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вот еще один подход, использующий только sub:

a <- c("Bob/7", "What is this?", "Seventeen", "AA 1", "AA 7", " AA 7")
sub("(.*?[/ ]|).*", "\\1", a)
# [1] "Bob/"  "What " ""      "AA "   "AA "   " "   

Итак, здесь .*?[/ ] - это почти то же, что вы имели: я заменил + на * для случаев, подобных последнему вмой a вектор.Затем | соответствует ИЛИ, так что a|b соответствует a или b.Теперь наличие .*?[/ ]| соответствует тому, что мы хотим, или, если этого не было, мы сопоставляем пустую строку "".Без него мы получили бы:

sub("(.*?[/ ]).*", "\\1", a)
# [1] "Bob/"      "What "     "Seventeen" "AA "       "AA "       " "   

А именно, с Seventeen ничего не поделаешь, поэтому он остался неизменным, а при реальном решении мы заменили его пустой строкой.

0 голосов
/ 21 декабря 2018

Нашли решение:

b <- regmatches(a, regexpr("^.+?[/ ]", a))
b
[1] "Bob/"  "What "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...