从R中的化学式中提取数字

时间:2018-02-16 16:45:59

标签: r regex string chemistry

我的数据集(MSdata)看起来像这样

m.z       Intensity Relative    Delta..ppm. RDB.equiv.  Composition 
301.14093   NA       100.00         -0.34   5.5         C16 H22 O4 Na
149.02331   4083458.5   23.60       -0.08   6.5         C8 H5 O3
279.15908   NA        18.64         -0.03   5.5         C16 H23 O4

我希望它看起来像

m.z       Intensity Relative    Delta..ppm. RDB.equiv.  C    H   O   Na
301.14093   NA       100.00         -0.34   5.5         16   22  4   1
149.02331   4083458.5   23.60       -0.08   6.5         8    5   3   0
279.15908   NA        18.64         -0.03   5.5         16   23  4   0

我已经使用了这个

library(stringr)
numextract <- function(string){
unlist(regmatches(string, gregexpr("[[:digit:]]+\\.*[[:digit:]]*"
                                  ,string)))
}
MScomp <- numextract("C14 H18 O4 Na")

然而,这给了我

'14' '18' '4'

我需要&#39; Na&#39;字符串给我一个值1或0(或NA)。我是编码的新手,其中很多都超出了我 - 我一直在使用这个website to help me。另外我不知道如何将这些新列(如果这可以..)合并到我当前的矩阵中。我之前链接的网站使用newcol()函数?感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:2)

我根据需要编辑了代码:

library(tidyverse)
library(stringr)  



dat%>%mutate(Composition=gsub("\\b([A-Za-z]+)\\b","\\11",Composition),
              name=str_extract_all(Composition,"[A-Za-z]+"),
              value=str_extract_all(Composition,"\\d+"))%>%
   unnest()%>%spread(name,value,fill=0)
       m.z Intensity Relative Delta..ppm. RDB.equiv.    Composition  C  H Na O
1 149.0233   4083459    23.60       -0.08        6.5       C8 H5 O3  8  5  0 3
2 279.1591        NA    18.64       -0.03        5.5     C16 H23 O4 16 23  0 4
3 301.1409        NA   100.00       -0.34        5.5 C16 H22 O4 Na1 16 22  1 4