我需要与tidyr分开的两列。
该列的文字如下:I am Sam
。我的意思是文本总是只有两个空格,文本可以包含所有其他符号:[a-z][0-9][!\ºª, etc...]
。
问题是我需要将其拆分为两列:第一列I am
和第二列:Sam
。
我无法找到与第二个空格分开的两个正则表达式。
你能帮我吗?
答案 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”......