如何在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
相关产品推荐
相关产品推荐

