Как посчитать вхождения однозначных цифр, за которыми следует определенный символ в R - PullRequest
1 голос
/ 20 мая 2019

В R для заданной символьной строки - например ::1001*

this_str <- "1. blah blah. 2. blah blah, 50 blah. 3. Blah; blah blah June 21, 2016."

Мне нужно посчитать, сколько раз одна цифра появляется после точки.Я почти могу сделать это, используя

> library(stringr)
> str_count(this_str, "[0-9]\\.")
[1] 4

Однако этот код также считает год 2016. в конце последнего предложения.Как я могу изменить str_count(this_str, "[0-9]\\."), чтобы исключить такие случаи.

В моей конкретной проблеме я знаю, что цифры, которые я хочу считать, будут 1-9.Таким образом, одним из способов может быть изменение, чтобы исключить числа, содержащие более одной цифры.Но не уверен, как это закодировать.Также было бы неплохо иметь более общее решение (где числа, которые нужно подсчитать, могут иметь более одной цифры), если кто-то может подумать об этом.

Ответы [ 3 ]

4 голосов
/ 20 мая 2019

Мы можем указать границу слова (\\b), чтобы она соответствовала одной цифре, за которой следует . от границы слова.Для 2016 года есть 4 цифры, и это не так

library(stringr)
str_count(this_str, "\\b[0-9]\\.")
#[1] 3

Как упоминалось в OP, I know the digits I want to count will be 1-9., поэтому оно должно работать

2 голосов
/ 20 мая 2019

Используя регулярное выражение из @akrun, вы также можете сделать это с помощью base R:

length(grepRaw("\\b[0-9]\\.", this_str, all = TRUE))

[1] 3

Или:

lengths(regmatches(this_str, gregexpr("\\b[0-9]\\.", this_str)))
1 голос
/ 21 мая 2019

Если требование состоит в том, чтобы что-то следовало за периодом, то это дает:

>  str_count(this_str, "[0-9]\\..")
[1] 3

Если, с другой стороны, требуется, чтобы шаблон числа-периода с пробелом следовал следующим образом:

>  str_count(this_str, "[0-9]\\.[ ]")
[1] 3

Я беспокоился о том, что такие шаблоны, как цифра-цифра-период-пробел, могут быть пропущены.

...