【发布时间】:2019-07-16 01:37:23
【问题描述】:
我有一个数据框,其中的列按“m.z、强度、相对、增量、RBD.equiv.和成分”的顺序排列,每一行都有根据特定分子填充的这些参数。在组合列中,它有诸如“C7 H11 O4”之类的内容根据分子式的元素数量。但是,当组合物中显示碳同位素时,“C11 [13]C H21 O N3 S2”代码失败并给我一个错误。我希望能够将 [13]C 作为自己的列,以便将其与其他分子区分开来。
我的 data.frame 如下所示,但还有数百个组合。 Dataframe 来自 csv 文件以供参考。我不确定在 gsub 中使用什么模式,以便将 [13]C 转换为具有相应行的列。
#This is how my data frame looks like but with more rows
#m.z Intensity Relative Delta. RBD.equiv Composition
#275 7555870 100 -0.49 0.0 C3 [13]C H4 O2
#136 126098 70.67 -2.72 5.5 C7 H11 O4 Na S
data <- dataframe%>%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)
#I expect to see something like this when I print my results
#m.z Intensity Relative Delta. RBD.equiv Composition C [13]C H O Na
#275 7555870 100 -0.49 0.0 C3 [13]C H4 3 1 4 0 0
#133 126098 70.67 -2.72 5.5 C7 H5 O4 Na 7 0 5 4 1
【问题讨论】:
-
这可能是一个棘手的问题,假设分子可以包含任何元素。是否存在固定数量的预期元素?
-
所以我通常尝试将其保持在一定数量之间,例如 C、H、O、N、Na、S、Si,但有时我会添加额外的元素。