字符串分割和粘贴前缀到新的分割字符串

时间:2019-04-22 15:47:56

标签: r

我需要用一个公共字符分割一串字符串,但是我需要保留此分割的前缀并将其粘贴到新的分割字符串中。这是矢量数据中前两个字符串的示例(有很多)。

示例:

dat <- c("Dry Lake I & II", "Blue Moon 1 & 2", "Hardscrabble 2012 & 2013)
"Dry Lake I & II"
"Blue Moon 1 & 2"

需要成为:

"Dry Lake I" 
"Dry Lake II"
"Blue Moon 1"
"Blue Moon 2"

我可以和strsplit分手,但是我不知道如何完成第二部分。

strsplit(dat, "&")

给我:

[[1]]
[1] "Dry Lake I " " II" 
[[2]]
[1] "Blue Moon 1 " " 2" 

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我们可以使用sub将“ " & "”替换为“ Dry Lake”,然后使用scan将字符串分成两个

scan(text = sub(" & ", ",Dry Lake", str1, fixed = TRUE), sep=",",
          what = "", quiet = TRUE)
#[1] "Dry Lake I" "Dry LakeII"

更新

使用更新的数据

scan(text = sub("^([A-Za-z ]+) ([I1]) \\&", "\\1 \\2,\\1", dat), 
              sep=",", what = "", quiet = TRUE)
#[1] "Dry Lake I"  "Dry Lake II" "Blue Moon 1" "Blue Moon 2"

数据

str1 <- "Dry Lake I & II"

答案 1 :(得分:2)

这是一个可能满足您需求的版本:

x <- "Dry Lake I & II"
x <- sub("(.*) I & II", "\\1 I & \\1 II", x)
strsplit(x, "\\s+&\\s+")[[1]]

[1] "Dry Lake I"  "Dry Lake II"

这里的逻辑是将<some content> I & II转换为:

<some content> I & <some content> II

然后,我们在定界符&上分割以生成字符向量。这里的一个缺陷是,如果&可以作为名称的一部分出现,则该方法可能行不通。

答案 2 :(得分:1)

匹配输入的三个部分,将它们放置在新字符串中,重复第一部分,并在它们之间使用换行符。然后阅读在换行符处有效拆分的内容。

readLines(textConnection(sub("(.*) (\\S+) & (\\S+)", "\\1 \\2\n\\1 \\3", dat)))
## [1] "Dry Lake I"  "Dry Lake II" "Blue Moon 1" "Blue Moon 2"