как удалить десятичную точку между числами в R

#r #regex

Вопрос:

Я пытаюсь удалить десятичные точки в десятичных числах в R. Пожалуйста, обратите внимание, что я хочу сохранить полную остановку строк.

Пример:

 data= c("It's 6.00pm, and is late.") 
 

Я знаю, что для этого мне нужно использовать регулярное выражение, но я борюсь. Мой желаемый результат таков:

 "It's 6 00pm, and is late."
 

Заранее спасибо.

Ответ №1:

Попробуйте это:

  sub("(?<=\d)\.(?=\d)", " ", data, perl = TRUE)
 

Это решение использует (?<=...) lookbehind и lookahead (?=...) , чтобы утверждать, что период, который вы хотите удалить, должен быть заключен в d igits (таким образом, избегая совпадения с периодом в конце предложения). Если у вас есть несколько таких случаев в строках, используйте gsub вместо sub .

Ответ №2:

Я предлагаю использовать простой шаблон для поиска целевого текста, а затем добавить круглые скобки, чтобы определить части соответствующего текста, которые вы хотите сохранить.

 # Test data
data <- c("It's 6.00pm, and is late.") 
 

Целевой шаблон представляет собой буквальную точку со строкой цифр до и после нее. \d соответствует одной или нескольким цифрам и \. буквенной точке. Тестирование шаблона, чтобы проверить, работает ли он:

 grepl("\d \.\d ", data)
 

Результат

 TRUE
 

Если бы мы тоже хотели исключить все это, мы могли бы сделать простую замену пустой строкой. Проверка, соответствует ли это правильному тексту:

 sub("\d \.\d ", "", data)
 

Результат

 "It's pm, and is late."
 

Вместо этого, чтобы удалить только часть совпадающего текста, мы можем определить части, которые мы хотим сохранить, что делается путем окружения их круглыми скобками. После этого мы можем обратиться к захваченному тексту в замене. \1 относится к первому захваченному фрагменту текста и \2 относится ко второму фрагменту текста, соответствующему первому и второму наборам скобок

 # pattern replacement
sub("(\d )\.(\d )", "\1\2", data)
 

Результат

 [1] "It's 600pm, and is late."
 

Это эффективно удаляет точку, опуская ее из текста замены.

Комментарии:

1. спасибо вам за ваши объяснения и рекомендации!!! это сработало!