You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言拆分化学分子式为元素组分:缺失元素与无数字元素处理

解决R语言拆分化学分子式并生成元素计数表格的问题

实现思路

先通过正则表达式提取分子式中的元素及对应数量(无数字标注的元素默认计1),再与指定元素列表匹配,缺失元素填充0,最终生成标准化计数表格。

具体步骤

  1. 加载依赖包:使用tidyverse工具集(包含stringr用于字符串处理,dplyr用于数据整理)
# 若未安装先执行安装
# install.packages("tidyverse")
library(tidyverse)
  1. 定义目标元素与解析函数
    指定需要统计的元素列表,编写函数处理单个分子式:
# 目标元素列表
target_elements <- c("C", "H", "O", "N", "P", "S")

# 解析单个分子式的函数
parse_formula <- function(formula_str) {
  # 提取元素(大写开头)和后续数字(允许空值)
  elem_matches <- str_extract_all(formula_str, "([A-Z])(\\d*)", simplify = TRUE)
  
  # 转换为数据框,空数字替换为1
  elem_df <- data.frame(
    Element = elem_matches[, 1],
    Count = ifelse(elem_matches[, 2] == "", 1, as.integer(elem_matches[, 2])),
    stringsAsFactors = FALSE
  )
  
  # 匹配目标元素,缺失元素填充0,转宽格式输出
  data.frame(Element = target_elements, stringsAsFactors = FALSE) %>%
    left_join(elem_df, by = "Element") %>%
    mutate(Count = replace_na(Count, 0)) %>%
    pivot_wider(names_from = Element, values_from = Count)
}
  1. 测试单个分子式
# 测试示例分子式
parse_formula("C6H12ON2PS")

输出结果:

# A tibble: 1 × 6
      C     H     O     N     P     S
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     6    12     1     2     1     1
  1. 批量处理多个分子式
# 批量处理示例
formula_list <- c("C6H12ON2PS", "H2O", "C6H6", "NH3")
map_dfr(formula_list, parse_formula)

输出结果:

# A tibble: 4 × 6
      C     H     O     N     P     S
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     6    12     1     2     1     1
2     0     2     1     0     0     0
3     6     6     0     0     0     0
4     0     3     0     1     0     0

原代码问题说明

你之前使用的str_split(strsplit(as.character(Form), '(?<=.)(?=[A-Z])', perl=TRUE))仅完成了分子式的初步拆分(如将C6H12ON2PS拆分为["C6", "H12", "O", "N2", "P", "S"]),但缺少提取元素与数字对应关系、补全缺失元素并填充0的关键步骤,因此无法处理元素缺失的场景。

内容的提问来源于stack exchange,提问作者Moritz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:22:50