2015-05-01 2 views
1

У меня есть кадр данных со строкой, содержащей местоположения. Места могут иметь различные форматы, такие как:Удалить непревзойденные слова строки в R

"New York Manhattan UpperEast" 
"Upper East, Manhattan, New York" 
"Manhattan, New York, Upper East" 
"California, San Francisco, Knob Hill" 
"San Francisco Knob Hill California" 

Я хотел бы найти определенные слова (например, все государственные имена), и удалить все остальное. Выходной сигнал должен быть

New York 
New York 
New York 
California 
California 

Как мне это сделать в R?

+0

Вы хотите удалить все остальные строки, которые не совпадают? Или вы хотите удалить часть строки, которая не соответствует? – CephBirk

+0

@CephBirk & Ananda, Я обновил вопрос, чтобы сделать его более ясным – AdamNYC

ответ

3

Создать регулярное выражение из встроено state.name вектора, который соответствует любому государству и применять его с помощью strapplyc из пакета gsubfn, как это:

x <- c("New York Manhattan UpperEast", 
"Upper East, Manhattan, New York", 
"Manhattan, New York, Upper East", 
"California, San Francisco, Knob Hill", 
"San Francisco Knob Hill California") 

library(gsubfn) 
states <- paste(state.name, collapse = "|") 
strapplyc(x, states, simplify = TRUE) 

даяние:

[1] "New York" "New York" "New York" "California" "California" 
+0

Огромное вам спасибо! – AdamNYC

1

Предполагая, что кадр данных будет что-то вроде этого:

names <- c("New York Manhattan UpperEast", 
      "Upper East, Manhattan, New York", 
      "Manhattan, New York, Upper East", 
      "California, San Francisco, Knob Hill", 
      "San Francisco Knob Hill California") 

df <- data.frame(locations =names) 

Вы можете использовать некоторую форму Grep (Это получит остальные строки)

df$locations <- gsub("Manhattan|San\ Francisco","",df$locations) 

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

library(stringr) 

df$locations <- str_match(df$locations, "Manhattan|San\ Francisco") 
+0

Ваше решение работает хорошо для меня. Благодарю. – AdamNYC

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