r - 从 R 中的化学式中提取数字(缺少 1 的数字)
问题描述
虽然我在“从 R 中的化学式中提取数字”中尝试了@Onyambu 的答案,但新问题来了。参考代码如下,
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
例如。我的问题是如何处理这样的公式,“C7H5NO4”?我只得到了 ("C" "H" "NO") 和 ("7" "5" "4"); 正确的形式是 ("C" "H" "N","O") 和 ("7" "5" ,"1","4")。
如果我们能插入1
“N”和“O”,问题可能就解决了。我不知道如何处理它。
谢谢
嘻嘻
解决方案
根据您的其他问题,如何:
library(tidyverse)
library(tidytext)
df %>%
unnest_tokens(part, Composition, to_lower = FALSE) %>%
mutate(col = str_extract(part, "[A-z]+"),
val = as.integer(str_extract(part, "\\d+"))) %>%
select(-part) %>%
mutate(val = ifelse(is.na(val), 1, val)) %>%
pivot_wider(names_from = col,
values_from = val,
values_fill = 0)
#> # A tibble: 3 x 9
#> m.z Intensity Relative Delta..ppm. RDB.equiv. C H O Na
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 301. NA 100 -0.34 5.5 16 22 4 1
#> 2 149. 4083458. 23.6 -0.08 6.5 8 5 3 0
#> 3 279. NA 18.6 -0.03 5.5 16 23 4 0
这利用了合成中项目之间的空间。unnest_tokens
fromtidytext
在我们将它们分成不同的列之前将它们分成新的行。
推荐阅读
- sqlite - 带有任务计划程序的 Sqlite3 或使用命令提示符计划任务
- r - igraph中最低的共同祖先
- python - Django 表单不呈现。
- javascript - 如何删除旧的 SVG 元素,然后用新元素替换它?
- python-3.x - 如何使用列表单元格从列表中查看 DataFrame
- javascript - 无法从插槽子组件中的父级访问数据属性
- android - 如何在不指定密钥的情况下从 firebase 检索数据?
- regex - 正则表达式匹配单词后跟空格或空
- javascript - Netlify Lambda 函数不从 POST 请求中获取参数(使用 fetch / axios)
- php - 如何在此调度程序中传递参数?