将字符串a按照某个前缀分割,并将该前缀添加到新的分割字符串中。

3
我需要将一堆字符串按照一个共同的字符进行分割,但是我需要保留这个分割的前缀并将其粘贴到新的分割字符串中。以下是我的向量数据中前两个字符串的示例(有很多)。
示例:
dat <- c("Dry Lake I & II", "Blue Moon 1 & 2", "Hardscrabble 2012 & 2013)
"Dry Lake I & II"
"Blue Moon 1 & 2"

needs to become:

"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个回答

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"

谢谢!有没有办法让它变得动态?例如,Dry Lake只是需要通过“&”拆分的众多字符串之一。 - user1658170
@user1658170,您能否展示一个稍微更好的通用示例以便理解问题? - akrun

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

然后,我们按照分隔符&进行拆分,生成一个字符向量。这种方法的一个缺陷是,如果&出现在名称的一部分,则可能无法正常工作。最初的回答。

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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接