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

如何在R中按Point.ID最后两位分组求均值并生成新列?

解决方案

不需要提前拆分数据集,直接通过提取Point.ID的最后两位来分组计算均值即可,用dplyr和stringr工具包就能实现:

library(dplyr)
library(stringr)

# 读取原始数据
streams <- read.csv("Soil Temp Gradient - DATA.csv")

# 核心数据处理流程
result <- streams %>%
  # 筛选出你需要的Stream 1 Zone 1数据范围
  filter(between(Point.ID, 11000, 11320)) %>%
  # 提取Point.ID最后两位,补零格式化为两位字符串
  mutate(Group_Point = str_pad(str_sub(Point.ID, start = -2), width = 2, pad = "0")) %>%
  # 按Zone和分组后的Point后缀分组
  group_by(Zone, Group_Point) %>%
  # 计算温度均值并保留三位小数
  summarise(Avg.Pt.Temp = round(mean(Point.Temp), 3)) %>%
  # 重命名列以匹配目标格式
  rename(Point.ID = Group_Point) %>%
  ungroup()

# 查看结果
print(result)

关键步骤说明

  • str_sub(Point.ID, start = -2):不管Point.ID是几位数字,都能精准提取最后两位,这是分组的核心依据。
  • str_pad(...):把提取出的数字补成两位字符(比如1转为01),和你想要的目标格式完全匹配。
  • group_by() + summarise():完成分组计算均值的核心操作,一步到位替代你拆分多个数据集的繁琐操作。

你之前的操作问题

  1. 提前拆分多个子数据集完全没必要,反而会增加后续合并计算的复杂度;
  2. starts_with()、ends_with()是列选择函数,用来筛选数据框的列名,不是用来处理行的分组或筛选逻辑,所以用它们来处理Point.ID的分组是方向错误的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:35:20