R - 在空格后分割一个字符串

时间:2016-09-07 10:37:31

标签: r split

我在R中有邮政编码数据,如下所示:

Postcodes
AB4 6JK
AR14 8UI
D4 9IK
CB3 9EU

但是我想将邮政编码分成邮政编码扇区,其中包括空格后面的一个字符,所以它们看起来像这样:

Postcodes
AB4 6
AR14 8
D4 9
CB3 9

我发现很多Q& As专注于根据空格分隔字符串,例如herehere,但如何指定在分隔后输出一个字符空间?

邮政编码不是固定长度。

我打算根据更高级别的邮政编码扇区聚合邮政编码数据。

3 个答案:

答案 0 :(得分:4)

您可以使用sub尝试以下正则表达式方法。它创建一个捕获组并从字符串中提取它。

假设您的数据被称为x

x <- read.table(header=TRUE,text="Postcodes
                'AB4 6JK'
                'AR14 8UI'
                'D4 9IK'
                'CB3 9EU'")

方法可能是这样的:

sub("^(.*\\s.).*", "\\1", x$Postcodes)
# [1] "AB4 6"  "AR14 8" "D4 9"   "CB3 9" 

模式是:字符串的开头(^),后跟任意字符(.*),后跟空格(\\s)和一个附加字符({{1 }) - 这些一起构成了捕获组。此外,任何后续内容都不属于捕获组。

请注意,如果您有多个空格的字符串,则会执行以下操作:

.

答案 1 :(得分:1)

您可以使用正向lookbehind regexp在以空格开头的数字之后进行拆分。

strsplit(postcode,"(?<= [0-9])",perl=TRUE)

获取拆分字符串的第一部分:

sapply(strsplit(postcode,"(?<= [0-9])",perl=TRUE),'[[',1)
#[1] "AB4 6"  "AR14 8" "D4 9"   "CB3 9"

答案 2 :(得分:1)

你也可以这样做:

lapply(strsplit(as.character(Postcodes), " "), function(x) paste(x[1], substr(x[2],0,1)))