2014-12-22 4 views
2

У меня есть фрейм данных r, который содержит состояния штата и графства США в одном столбце. Данные находятся в следующем формате:Изолирование частичного текста в r фрейме данных

United States - State name - County name 

где каждая ячейка является уникальным графством. Например:

United States - North Carolina - Wake County 
United States - North Carolina - Warren County 
etc. 

Мне нужно разбить колонну на 2 колонки, одна из которых содержит только имя состояния, а другой, содержащих только название округа. Я экспериментировал с sub и gsub, но не получал никаких результатов. Я понимаю, что это, наверное, простой вопрос для экспертов, но я новичок. Я был бы очень признателен, если бы кто-нибудь мог указать мне в правильном направлении.

ответ

3

Вы можете использовать separate функцию tidyr «s:

library(tidyr) 
df <- separate(df, currentColumn, into = c("Country", "State", "County"), sep = " - ") 

Если данные, как вы показываете в вашем вопросе (в том числе США, как страну), и если ваш кадр данных называется ДФ и текущий столбец с данные называются currentColumn.

Пример:

df <- data.frame(currentColumn = c("United States - North Carolina - Wake County", 
"United States - North Carolina - Warren County"), val = rnorm(2)) 

df 
#         currentColumn  val 
#1 United States - North Carolina - Wake County 0.8173619 
#2 United States - North Carolina - Warren County 0.4941976 

separate(df, currentColumn, into = c("Country", "State", "County"), sep = " - ") 
#  Country   State  County  val 
#1 United States North Carolina Wake County 0.8173619 
#2 United States North Carolina Warren County 0.4941976 
+0

Я собирался опубликовать ответ, используя 'strsplit', но теперь я просто начну использовать' tidyr'. До сих пор я видел только впечатляющие примеры «распространения» и «собирания». – shadowtalker

+0

@docendodiscimus Еще раз, вы были намного быстрее в предоставлении лучшего ответа, используя 'tidyr', ура! –

+1

Наверное, быть жестким, хотя из-за того, что акрун собирается выйти в интернет. Ха-ха. Мне нравится, как маленький и сплошной тег R –

1

Использование read.table, и предполагая, ваши данные в df$var

read.table(text=df$var,sep="-",strip.white=TRUE, 
      col.names=c("Country","State","County")) 

Если скорость является проблемой, то strsplit будет намного быстрее:

setNames(data.frame(do.call(rbind,strsplit(df$var,split=" - "))), 
     c("Country","State","County")) 

Оба дают:

#  Country   State  County 
#1 United States North Carolina Wake County 
#2 United States North Carolina Warren County 
Смежные вопросы