2016-03-11 108 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