2013-11-28 7 views
1

enter code here У меня возникла проблема с извлечением строки. Я хочу вытащить уличные имена из уличных имен + номера. Проблема в том, что некоторые уличные имена содержат числа. Могу ли я объединить несколько шаблонов для извлечения строк?str_replace с несколькими аргументами

w<-c("STREET TEST 55A","Q 7 NR 50","STREET TEST TEST 55-56") 
place<-c("B" "A" "C") 

    w<-str_replace(w,perl("^(\\b[0-9]+.*\\b) | \\b([A-Z] ?[0-9] ?N?R?)([0-9]*)\\b"),"\\1") 

Я хочу такой вектор

w<-c("STREET TEST","Q 7","STREET TEST TEST) 

У меня также есть вектор место. И дело Q 7 NR 50 происходит только в месте A но не на месте B/C Заранее спасибо

+0

Я подозреваю, что ваша фактическая проблема может быть неразрешимой вообще, по крайней мере, если ваши данные не ограничены небольшой географической зоной с обычными названиями улиц и обозначениями номеров домов. Вы _might_ убегаете, считая, что названия улиц не содержат _usually_ и содержат определенные правила для нескольких исключений, с которыми вы сталкиваетесь. Даже тогда, если ваши данные глобальны, вам, возможно, придется столкнуться с дополнительной проблемой, которая в разных частях мира может заключаться в том, чтобы написать название улицы до или после номера дома. Кроме того, дома могут иметь имена. –

ответ

1

Я делаю предположение, что, если последнее слово содержит только цифры, то вам нужно второе последнее слово, а сделать housename. Если это предположение верно, то следующий код работает

w<-c("STREET TEST 55A","Q 7 NR 50","STREET TEST TEST 55-56") 
library(stringr) 
housename <- ifelse(nchar(gsub("[[:digit:]]","",word(w,-1)))==0 
,paste(word(w,-2),word(w,-1),sep=" ") 
,word(w,-1)) 
streetname <- str_replace_all(w,housename,"") 

housename
[1] "55А" "NR 50" "55-56"
Streetname
[1] "УЛИЦА TEST" " Q 7 "" ИСПЫТАНИЕ ИСПЫТАНИЙ УЛИЦЫ "

Смежные вопросы