преобразование числовых значений в десятичные числа - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть текстовый файл со значениями с одним или двумя или некоторыми с 3 десятичными точками. Эти значения генерируются программным обеспечением на основе интенсивности сигнала генов. Когда я пытался вычислить матрицу расстояний из нее, я получилпредупреждающее сообщение:

Предупреждающее сообщение: In dist (sam): NA введены по принуждению Ниже приведен пример текстового файла: sample1
a 23.45.12
b 123.345.234
c 45.2311.34

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

  sample1                

a 23,45
b 123,345
c 45,2311

Pleaso действительно помогите мне

1 Ответ

2 голосов
/ 28 февраля 2012

Вы можете сделать это в одной строке кода с помощью as.numeric и gsub с подходящим регулярным выражением:

sample1 <- c(
  a = "23.45.12",
  b = "123.345.234",
  c = "45.2311.34"
)

as.numeric(
  gsub("(\\d+\\.\\d+)\\..*", "\\1", sample1)
)

[1]  23.4500 123.3450  45.2311

Регулярное выражение:

  • \\d* находит одну или несколько цифр
  • \\. находит период
  • Таким образом, (\\d+\\.\\d+) находит два набора цифр с точкой между ними, а затем группирует их (в скобках)
  • Наконец, \\..* находит период, за которым следует полный подстановочный знак

Затем gsub заменяет всю строку только тем, что было найдено в скобках. Это называется обратной ссылкой регулярного выражения, обозначенной \\1.

...