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

如何在R中对chemical_formula向量各元素的原子数按元素求和?

按元素汇总化学分子式的原子总数
  • 先安装并加载CHNOSZ包(若未安装):
if (!require(CHNOSZ)) install.packages("CHNOSZ")
library(CHNOSZ)
  • 定义目标化学分子式向量:
chemical_formula <- c("CaF2", "Ca3(PO4)2", "FePO4")
  • 用makeup()解析每个分子式,得到元素与对应原子数的列表:
cell_salts_atoms <- lapply(chemical_formula, makeup)

核心汇总方法

你之前用lapply(cell_salts_atoms, sum)只能得到单个分子式的总原子数,要实现按元素跨分子式汇总,需要先拆分每个分子式的元素-原子数对,再分组求和:

方法一(Base R 实现)

# 将每个列表元素转换为数据框,再合并为统一表格
all_atoms <- do.call(rbind, lapply(cell_salts_atoms, function(x) {
  data.frame(
    element = names(x),
    count = unname(x),
    stringsAsFactors = FALSE
  )
}))

# 按元素分组求和
total_atoms <- aggregate(count ~ element, data = all_atoms, sum)
print(total_atoms)

方法二(dplyr 简洁实现,需提前安装)

if (!require(dplyr)) install.packages("dplyr")
library(dplyr)

# 转换为 tibble 并合并
all_atoms <- bind_rows(lapply(cell_salts_atoms, function(x) {
  tibble(element = names(x), count = unname(x))
}))

# 分组汇总
total_atoms <- all_atoms %>% 
  group_by(element) %>% 
  summarise(total_count = sum(count)) %>% 
  ungroup()

print(total_atoms)

输出示例

针对上述示例分子式向量,输出结果如下:

element count
1      Ca     4
2       F     2
3       Fe     1
4       P     3
5       O    12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:02:45