нумеровать некоторые шаблоны в строке, используя R - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть строки, и у них есть несколько таких шаблонов, как этот

my_string = "`d@k`0.55`0.55`0.55`0.55`0.55`0.55`0.55`0.55`0.55`n$l`0.4`0.1`0.25`0.28`0.18`0.3`0.17`0.2`0.03`!lk`0.04`0.04`0.04`0.04`0.04`0.04`0.04`0.04`0.04`vnabgjd`0.02`0.02`0.02`0.02`0.02`0.02`0.02`0.02`0.02`pogk(`1.01`0.71`0.86`0.89`0.79`0.91`0.78`0.81`0.64`r!#^#@niw`0.0014`0.0020`9.9999`9.9999`0.0020`0.0022`0.0032`9.9999`0.0000`

Как вы можете видеть, есть шаблоны [`nonnumber], затем [` number.num ~] повторяется. Поэтому я хочу определить, сколько [`number.num ~] находится между [` nonnumber].

Я пытался использовать регулярное выражение

index <- gregexpr("`(\\w{2,20})`\\d\\.\\d(.*?)`\\D",cle)
regmatches(cle,index)

, но используя этот код, [`\ D] перекрывается. так что просто не может сосчитать, сколько шаблонов. Так что если вы знаете какой-либо метод об этом, пожалуйста, оставьте ответ

1 Ответ

0 голосов
/ 23 апреля 2020

Использование strsplit. Мы разделяем на обратном токе и подсчитываем позицию diff erence which значений, приведенных к "numeric" yield NA. Обратите внимание, что нам нужно исключить первый элемент после strsplit и добавить NA в конце числового значения. В результате получается вектор, названный с нечисловым элементом, используя setNames (на самом деле не очень хорошие имена, но он демонстрирует, что происходит).

s <- el(strsplit(my_string, "\\`"))[-1]
s.num <- suppressWarnings(as.numeric(s))
setNames(diff(which(is.na(c(s.num, NA)))) - 1,
         s[is.na(s.num)])
# d@k       n$l       !lk   vnabgjd     pogk( r!#^#@niw 
#   9         9         9         9         9         9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...