将数值转换为十进制数

时间:2012-02-28 12:16:30

标签: r matrix distance

我的文本文件的值为一个或两个或一些带有3个小数点。这些值是由软件根据基因的信号强度生成的。当我尝试计算距离矩阵时,我得到了警告信息:

  

警告讯息:   在dist(sam):通过强制引入的NA   下面给出了一个示例文本文件:         SAMPLE1
  a 23.45.12
  b 123.345.234
  c 45.2311.34

我需要将这些值转换为一个小数点或实数,以便我可以计算距离矩阵,我可以使用它来进行聚类。我的预期结果如下:

  sample1                
     

23.45
  b 123.345
  c 45.2311

Pleaso帮帮我

1 个答案:

答案 0 :(得分:2)

您可以使用as.numericgsub以及合适的正则表达式在一行代码中执行此操作:

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表示。