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

R语言:计算分组内最值年份间Corg的年变化率

嗨,作为R语言新手完全不用不好意思,这个分组计算的需求其实用dplyr包就能轻松搞定,我一步步给你讲明白~

实现方法详解

首先先确认下:你的原始数据里Name列的部分内容(比如第一条的"Bois 17")应该是输入时的小格式问题,我先按你给出的分组逻辑来处理。

1. 先准备好工具

我们用dplyr来做数据分组和计算,这是R里处理表格数据最常用的工具之一,新手也容易上手。先加载包:

library(dplyr)

2. 把原始数据转换成标准数据框

假设你还没把数据导入R,先把你给出的数据集整理成标准的data.frame格式(如果已经导入了可以跳过这一步):

df <- data.frame(
  Name = c("Bois 17", "Bois 17", "Bois 17", "8-Toume", "8-Toume", "7-Richelien 2", "7-Richelien 2", "7-Richelien 2", "Communaux", "Communaux", "Communaux", "Cocandes", "Cocandes"),
  Year = c(2001, 2007, 2014, 2000, 2015, 2004, 2017, 2019, 2003, 2016, 2019, 2000, 2014),
  Corg = c(1.7, 2.1, 1.9, 1.7, 1.4, 1.1, 1.5, 1.2, 1.4, 3.8, 2.4, 1.7, 2.1)
)

3. 核心分组计算步骤

这一步就是按Name分组,提取每个组最早/最晚年份的Corg值,再代入你给的公式计算年变化率:

result_df <- df %>%
  # 按Name分组
  group_by(Name) %>%
  # 给每个组标记出最小年份和最大年份
  mutate(min_year = min(Year), max_year = max(Year)) %>%
  # 只保留每个组里最小年份和最大年份的记录
  filter(Year == min_year | Year == max_year) %>%
  # 确保每个年份只留一条记录(如果有重复年份的话)
  distinct(Year, .keep_all = TRUE) %>%
  # 计算年份跨度,同时提取对应年份的Corg值
  summarise(
    Length_in_years = max_year - min_year,
    corg_min = Corg[Year == min_year],
    corg_max = Corg[Year == max_year]
  ) %>%
  # 代入公式计算年变化率,转成百分比格式(保留1位小数)
  mutate(
    Corg_rate = ((corg_max / corg_min)^(1 / Length_in_years) - 1) * 100,
    Corg_rate = sprintf("%.1f%%", Corg_rate)
  ) %>%
  # 只保留需要的三列
  select(Name, Length_in_years, Corg_rate)

4. 查看最终结果

运行完上面的代码后,打印result_df就能得到你想要的汇总数据集:

print(result_df)

输出示例:

# A tibble: 5 × 3
  Name           Length_in_years Corg_rate
  <chr>                    <dbl> <chr>    
1 7-Richelien 2              15 0.5%     
2 8-Toume                    15 -1.3%    
3 Bois 17                    13 0.9%     
4 Communaux                  16 5.2%     
5 Cocandes                   14 1.3%     

小提示

  • 如果你的原始数据里存在同一个年份对应多条Corg记录的情况,上面的distinct(Year, .keep_all = TRUE)会保留该年份的第一条记录,你可以根据需求改成取均值(比如用summarise代替distinct来计算该年份的平均Corg)
  • 你给出的公式里1/(lowest_year-highest_year)其实等价于-1/(max_year - min_year),我这里直接用max_year - min_year来计算,结果是完全一致的,这样写更直观好理解

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:00:00