我在R中有邮政编码数据,如下所示:
Postcodes
AB4 6JK
AR14 8UI
D4 9IK
CB3 9EU
但是我想将邮政编码分成邮政编码扇区,其中包括空格后面的一个字符,所以它们看起来像这样:
Postcodes
AB4 6
AR14 8
D4 9
CB3 9
我发现很多Q& As专注于根据空格分隔字符串,例如here和here,但如何指定在分隔后输出一个字符空间?
邮政编码不是固定长度。
我打算根据更高级别的邮政编码扇区聚合邮政编码数据。
答案 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)))