在Tidyr的单独功能上的正则表达式

时间:2016-05-15 15:45:01

标签: r tidyr

我需要与tidyr分开的两列。

该列的文字如下:I am Sam。我的意思是文本总是只有两个空格,文本可以包含所有其他符号:[a-z][0-9][!\ºª, etc...]

问题是我需要将其拆分为两列:第一列I am和第二列:Sam

我无法找到与第二个空格分开的两个正则表达式。

你能帮我吗?

2 个答案:

答案 0 :(得分:4)

我们可以使用extract中的tidyr。我们匹配一个或多个字符并将其放在捕获组((.*))中,后跟一个或多个空格(\\s+)和另一个仅包含非空格字符的捕获组({{1} })将原始列分成两列。

\\S+

数据

library(tidyr)
extract(df1, Col1, into = c("Col1", "Col2"), "(.*)\\s+(\\S+)")
#   Col1 Col2
#1  I am  Sam
#2 He is  Sam

答案 1 :(得分:3)

作为替代方案,给出:

library(tidyr)
df <- data.frame(txt = "I am Sam")

你可以使用

separate(, txt, c("a", "b"), sep="(?<=\\s\\S{1,100})\\s") 
#      a   b
# 1 I am Sam

separate使用stringi::stri_split_regex(ICU引擎)或

separate(df, txt, c("a", "b"), sep="^.*?\\s(*SKIP)(*FAIL)|\\s", perl=TRUE) 

使用较早的(?)separate使用base:strsplit(Perl引擎)。另见

strsplit("I am Sam", "^.*?\\s(*SKIP)(*FAIL)|\\s", perl=TRUE)
# [[1]]
# [1] "I am" "Sam" 

但它可能有点“esoterique”......