2015-08-20 64 views
4

假设我有一个这样的数据帧:r分割字符串::独立

df<-data.frame(a=c("AA","BB"),b=c("short string","this is the longer string")) 

我想拆分使用基于过去的空间发生的历史正则表达式的每个字符串。 我想:

library(dplyr) 
library(tidyr) 
df%>% 
    separate(b,c("partA","partB"),sep=" [^ ]*$") 

但是这忽略了在输出字符串的第二部分。我期望的输出将如下所示:

a    partA partB 
1 AA    short string 
2 BB this is the longer string 

我该如何操作。如果我可以使用tidyr和dplyr来做这件事,会很好。

回答

10

通过使用捕获组((...)),我们可以使用来自tidyrextract。我们匹配零个或多个字符(.*)并将它放在括号内((.*)),后面跟零个或多个空格(\\s+),然后是下一个捕获组,它只包含非空格的字符([^ ]),直到结束($)的字符串。

library(tidyr) 
extract(df, b, into = c('partA', 'partB'), '(.*)\\s+([^ ]+)$') 
# a    partA partB 
#1 AA    short string 
#2 BB this is the longer string