我的数据集(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()函数?感谢您提供的任何帮助!
答案 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