обратная функция в R - PullRequest
       2

обратная функция в R

0 голосов
/ 29 сентября 2011

Я пытаюсь изолировать строки "24 !! 07 !! 10", "15 !! 08 !! 12" и "10 !! 08 !! 12" из 4 строк данных ниже.

> z
                                                             LEGAL
1                                                        MAP #1166
2                        SE1/4 NE1/4 24!!07!!10 EX  MAP #106 42.13
3                      MAP 15!!08!!12 N1/2NW1/4 15!!8!!12 80.00 AC
4 BEG NW COR SAID SEC THEN E208' 10!!08!!12 NW1/4 EX TR AC 158.65~

Во-первых, без опции max.distance функция agrep вообще не находит совпадений. Во-вторых, значение параметра = ИСТИНА, по-видимому, не дает фактических значений совпадений с образцом, и если на самом деле выходные данные являются индексами строк, первая строка вообще не должна совпадать.

> pattern <-"[0-99]-[0-99]-[0-99]"
> z1<-agrep(pattern ,z,ignore.case=TRUE, value=TRUE)
> z1
character(0)

> z1<-agrep(pattern,z,ignore.case=TRUE, value=TRUE, max.distance=22)
> z1
[1] "c(2, 4, 3, 1)"

Буду признателен за помощь в выяснении того, что происходит.

Ответы [ 4 ]

2 голосов
/ 29 сентября 2011

@ Кент прав в том, что ваше регулярное выражение не соответствует тому, что вы описываете как шаблон. Кроме того, agrep для нечеткого соответствия в лингвистическом смысле и не принимает регулярные выражения. Вы ищете grep или что-то в этой семье, вероятно regexpr.

Учитывая ваши данные

z <- c("MAP #1166", 
"SE1/4 NE1/4 24!!07!!10 EX  MAP #106 42.13", 
"MAP 15!!08!!12 N1/2NW1/4 15!!8!!12 80.00 AC", 
"BEG NW COR SAID SEC THEN E208' 10!!08!!12 NW1/4 EX TR AC 158.65~")

Вы можете найти расположение матчей и извлечь их с помощью

pattern <- "[0-9][0-9]!![0-9][0-9]!![0-9][0-9]"
locs <- regexpr(pattern, z)
substr(z, locs, locs+attr(locs,"match.length")-1)

Если вы хотите использовать другую форму регулярного выражения, вы можете. Вам просто нужно дважды убрать обратную косую черту в строковом литерале.

pattern <- "\\d{2}!!\\d{2}!!\\d{2}"
1 голос
/ 30 сентября 2011

Другое решение - использовать пакет stringr

require(stringr)

pattern <- "\\d{2}!!\\d{2}!!\\d{2}"
str_extract_all(z, pattern)

, и вы получите следующее:

[[1]]
character(0)

[[2]]
[1] "24!!07!!10"

[[3]]
[1] "15!!08!!12"

[[4]]
[1] "10!!08!!12"
1 голос
/ 29 сентября 2011

Подозреваемый agrep в R не поддерживает этот тип шаблона.В любом случае, вам, вероятно, следует использовать grep вместо:

z1 <- grep("\\d{2}!!\\d{2}!!\\d{2}", z, value=TRUE)
1 голос
/ 29 сентября 2011

не знаю R, но ваш шаблон может быть неправильным.

как насчет "\d{2}!!\d{2}!!\d{2}" или

"[0-9][0-9]!![0-9][0-9]!![0-9][0-9]"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...