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

简化同位素衰变类型分组的R代码实现方案咨询

优化方案:基于Tidyverse风格的核素衰变类型分组

针对你的需求,我们遵循H. Wickham倡导的DRY(Don't Repeat Yourself)原则和tidyverse编程范式,用更简洁的方式实现按最可能衰变类型分组的功能,彻底消除重复代码。

核心思路

  1. 将宽格式的衰变概率数据转换为长格式,避免对每种衰变类型编写重复逻辑
  2. 按核素分组,筛选出每个核素概率最高的衰变类型
  3. 基于筛选结果完成分组统计或后续分析

完整代码示例

假设你的数据集结构是:包含nuclide(核素标识)列,以及对应每种衰变类型的概率列(比如decay_2B-、decay_2EC、decay_P、decay_N等),代码如下:

library(tidyverse)

# ------------------------------
# 模拟数据集(实际使用时替换为真实数据)
# ------------------------------
set.seed(123)
nuclide_data <- tibble(
  nuclide = paste0("Nuclide_", 1:100),
  `decay_2B-` = runif(100),
  `decay_2EC` = runif(100),
  `decay_P` = runif(100),
  `decay_N` = runif(100)
)

# ------------------------------
# 转换格式并筛选每个核素的最可能衰变类型
# ------------------------------
nuclide_top_decay <- nuclide_data %>%
  # 把所有衰变类型列转为长格式:核素→衰变类型→概率
  pivot_longer(
    cols = starts_with("decay_"),  # 匹配所有以decay_开头的列,可根据实际列名调整规则
    names_to = "decay_type",
    values_to = "probability",
    names_prefix = "decay_"  # 移除列名前缀,得到纯衰变类型标识(如2B-、2EC)
  ) %>%
  # 按核素分组,筛选概率最大的行
  group_by(nuclide) %>%
  # 处理并列最大值:如果需要只保留一个,添加with_ties = FALSE
  slice_max(probability, n = 1) %>%
  ungroup()

# ------------------------------
# 按衰变类型分组(示例为统计每组核素数量)
# ------------------------------
nuclide_grouped <- nuclide_top_decay %>%
  group_by(decay_type) %>%
  summarise(nuclide_count = n()) %>%
  ungroup()

优化点说明

  • 消除重复代码:无论新增多少种衰变类型,只需确保列名符合规则,代码无需修改,彻底避免复制粘贴
  • 优雅的筛选逻辑:用slice_max替代手动的max判断,代码更易读且符合tidyverse规范
  • 灵活扩展:如果需要处理并列最大值(一个核素多种衰变概率相同),只需调整slice_max的with_ties参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:22