Удалить повторяющиеся точки с запятой в R? - PullRequest
1 голос
/ 19 июня 2019

Я использовал tidyr::unite для объединения многих столбцов, используя точку с запятой в качестве разделителя. Я изменил все NA на пробелы (''). Когда я запускаю команду unite, я получаю то, что хочу, а также много ячеек с повторяющимися точками с запятой - оставшихся из пустых ячеек. Вот пример моей строки.

string <- c('community centre;;sports hall;;;','community centre;;;;;')

После нахождения этого SO вопроса на похожую тему я придумал это регулярное выражение. Но это отсекает хвостовые символы с моей строки.

gsub('([[:alpha:]])\\;+', '\\;', string)

[1] "community centr;sports hal;"
[2] "community centr;" 

После возвращения назад я не могу идти дальше. Я хотел бы регулярное выражение, которое дает мне этот вывод.

[1] "community centre; sports hall"
[2] "community centre" 

Спасибо.

Ответы [ 3 ]

2 голосов
/ 19 июня 2019

Я бы предложил двухэтапный процесс для простоты.Сначала замените несколько ; на "; ", затем удалите "; " из конца строки.Любитель регулярных выражений будет более эффективным, но менее простым.

string = gsub(";+", "; ", string)
string = gsub("; $", "", string)
string
# [1] "community centre; sports hall" "community centre"
1 голос
/ 19 июня 2019

Мы могли бы использовать:

stringr::str_remove_all(string,";(?=\\W+)|;$")
[1] "community centre;sports hall" "community centre"
0 голосов
/ 19 июня 2019

Вы можете использовать одно регулярное выражение для задания:

gsub("^;+|;+$|(;)+", "\\1", string)

Или, если хотите, stringr:

stringr::str_replace_all(string, "^;+|;+$|(;)+", "\\1")

Это соответствует

  • ^;+ - один или несколько (+) ; символов в начале строки (^)
  • | - или
  • ;+$ - одинили более (+) ; символов в конце строки ($)
  • | - или
  • (;)+ - Группа захвата № 1 (повторяется одинили более раз) захват одного ; одного или нескольких раз.

Замена - это просто содержимое группы 1, которая является пустой строкой, если совпадают первые две альтернативы, и ;, еслитретьи альтернативные совпадения.

См. демо регулярных выражений и график регулярных выражений :

enter image description here

...