изменить количество цифр в числе в строке - PullRequest
0 голосов
/ 02 марта 2019

У меня есть набор строк, все из которых имеют номера с 4 цифрами, например:

"FTMS + c NSI Full ms [364.0000-391.0000]"

Я хочу преобразоватьвсе числа должны иметь только 2 цифры, поэтому они становятся

"FTMS + c NSI Full ms [364.00-391.00]"

строки не имеют определенной структуры.Есть ли простое однострочное решение?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

gsubfn

При этом используется только простой шаблон, который соответствует символьным строкам, представляющим число с десятичными знаками, преобразующим каждое такое совпадение в числовое и использующее sprintf для форматирования с двумя десятичными знаками.

library(gsubfn)

gsubfn("\\d+\\.\\d+", ~ sprintf("%.2f", as.numeric(x)), s)
## [1] "FTMS + c NSI Full ms [364.00-391.00]"

Base R

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

gsub("(\\d+\\.\\d{2})\\d+", "\\1", s)
## [1] "FTMS + c NSI Full ms [364.00-391.00]"

Примечание

Ввод:

s <- "FTMS + c NSI Full ms [364.0000-391.0000]"
0 голосов
/ 02 марта 2019

Это должно работать:

library(stringr)

x = "FTMS + c NSI Full ms [364.0000-391.0000]"

str_replace_all(x, "([0-9]+\\.[0-9]{2})[0-9]+", "\\1")
# [1] "FTMS + c NSI Full ms [364.00-391.00]"

Мы ищем шаблоны

  • Первая группа захвата: 1 или более чисел, за которыми следует "."за которыми следуют ровно 2 числа
  • , за которыми следуют дополнительные числа

Мы сопоставляем все, что описано выше, и заменяем его первой группой захвата (первая маркировка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...