2015-08-20 105 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