строка разделить и вставить префикс в новую строку разделения - PullRequest
3 голосов
/ 22 апреля 2019

Мне нужно разделить несколько строк по общему символу, но мне нужно сохранить префикс этого разделения и вставить его в новую строку разделения. Вот пример первых двух строк в моих векторных данных (их много).

Пример:

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 ]

2 голосов
/ 22 апреля 2019

Вот версия, которая может соответствовать вашим потребностям:

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 голосов
/ 22 апреля 2019

Мы можем использовать sub для замены " & ") на "Сухое озеро" и 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 голос
/ 22 апреля 2019

Сопоставьте три части ввода, поместив их в новую строку с повторением первой части и новой строкой между ними. Тогда прочитайте это в эффективном разделении на новой строке.

readLines(textConnection(sub("(.*) (\\S+) & (\\S+)", "\\1 \\2\n\\1 \\3", dat)))
## [1] "Dry Lake I"  "Dry Lake II" "Blue Moon 1" "Blue Moon 2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...