2016-03-11 149 views
0

我有一個位置列,它看起來像以下各項分割列,根據空間

Location 
    San Jose CA 
    Santa Clara CA 

我想分成兩列。我使用的是從tidyr單獨的功能,但給人月的說法是「」給我的以下各項

City State 
    San Jose 
    Santa Clara 

如何我分裂僅基於第二空間列?

structure(list(Location = c("San Jose CA", "Santa Clara CA")), 
      .Names = "Location", class = "data.frame", row.names = c(NA, -2L)) 
+1

@Mridul Garg你確定模式在整個列中是一致的,即所有的位置都有兩個空格嗎? – TUSHAr

+0

不,它包含只有一個空格的列,例如Fremont CA.這些案件是給我麻煩的。 –

+0

非常感謝@JasonAizkalns工作完美無缺 –

回答

3
library(tidyr) 

df <- data.frame(Location = c("San Jose CA", "Fremont CA", "Santa Clara CA")) 
separate(df, Location, into = c("city", "state"), sep = " (?=[^ ]+$)") 

#   city state 
# 1 San Jose CA 
# 2  Fremont CA 
# 3 Santa Clara CA 
+0

您可以在'tidyr'中使用動態量詞嗎?我真的不明白什麼時候有可能。好的解決方案 – alistaire

+1

也許別人可以詳細說明,但我相信在下面,'sep'參數調用'stringi :: stri_split_regex' – JasonAizkalns

0

使用base R一個選項涉及用,(使用sub),然後使用read.csv來讀取該列替換的最後空間。

read.csv(text=sub("\\s+(\\S+)$", ",\\1", df1$Location), 
     col.names=c('City', 'State'), header=FALSE) 
#   City State 
#1 San Jose CA 
#2 Santa Clara CA