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

如何用dplyr的mutate函数基于分组列最大值生成优势树种新列

解决方案:用dplyr高效提取每年样地的优势树种

针对你的需求,我们可以用dplyr的行处理函数替代循环,以下提供两种简洁的实现方式:

方法一:宽格式直接处理(保留原数据结构)

无需改变原数据的宽格式,直接按年份列组逐行计算优势树种:

library(dplyr)
library(stringr)

# 定义树种缩写映射关系
species_map <- c(Spruce = "S", Pine = "P", Birch = "D")

df <- df %>%
  rowwise() %>%
  # 逐年份计算优势树种
  mutate(
    dom.species.y1 = species_map[str_remove(names(which.max(c_across(starts_with("Year1_")))), "Year1_")],
    dom.species.y2 = species_map[str_remove(names(which.max(c_across(starts_with("Year2_")))), "Year2_")],
    dom.species.y3 = species_map[str_remove(names(which.max(c_across(starts_with("Year3_")))), "Year3_")],
    dom.species.y4 = species_map[str_remove(names(which.max(c_across(starts_with("Year4_")))), "Year4_")]
  ) %>%
  ungroup()

代码说明:

  • rowwise():强制后续计算按行执行,确保每行单独找最大值
  • c_across(starts_with("YearX_")):精准选中对应年份的所有树种比例列
  • which.max():定位该行最大值的列名,再用str_remove()剔除年份前缀,最终通过映射关系转为缩写
  • ungroup():取消行分组,恢复数据框默认的向量运算模式

方法二:宽转长批量处理(适配年份扩展)

如果后续年份数量增加,宽格式重复写代码效率低,可通过宽转长批量处理后再转回宽格式:

library(dplyr)
library(tidyr)

species_map <- c(Spruce = "S", Pine = "P", Birch = "D")

df_processed <- df %>%
  # 添加样地ID,用于后续分组匹配
  mutate(plot_id = row_number()) %>%
  # 宽转长:拆分年份、树种、比例三列
  pivot_longer(
    cols = -plot_id,
    names_to = c("year", "species"),
    names_sep = "_",
    values_to = "proportion"
  ) %>%
  # 按样地+年份分组,提取每组比例最大的树种
  group_by(plot_id, year) %>%
  mutate(dom_species = species_map[species[which.max(proportion)]]) %>%
  ungroup() %>%
  # 转回宽格式,对齐原数据结构
  pivot_wider(
    id_cols = plot_id,
    names_from = year,
    values_from = dom_species,
    names_prefix = "dom.species.y"
  ) %>%
  # 和原数据合并,删除临时ID列
  right_join(df %>% mutate(plot_id = row_number()), by = "plot_id") %>%
  select(-plot_id)

代码说明:

  • pivot_longer():将分散的年份-树种列规整为统一的三列结构,便于批量处理
  • 分组后只需一次计算即可得到所有年份的优势树种,无需重复编写年份逻辑
  • pivot_wider():将处理结果转回宽格式,保持和原数据的结构一致性

结果验证

两种方法生成的优势树种列与你用循环得到的结果完全一致,例如查看Year1的结果:

df$dom.species.y1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:21