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

基于R语言tidyverse的海量数据集月度位置均值聚合求助

用tidyverse对昆虫学数据集做月度聚合(降低时间自相关)

核心思路

将数据集按同一位置(经度+纬度)+ 同一日历年月分组,对昆虫计数及数值型环境变量计算月度均值;分类型变量(如land)因同位置取值一致,直接保留唯一值即可。

完整代码实现

# 加载所需包
library(tidyverse)
library(lubridate)

# 示例数据集(用户提供)
df <- data.frame(
  insects = round(runif(20)*100),
  long = c(rep(22.4,5), rep(18.4,5), rep(21.8,5), rep(20.1,5)),
  lat = c(rep(-34.1,5), rep(-34.4,5), rep(-33.8,5), rep(-33.7,5)),
  land = c(rep("AG8",5), rep("GA6",5), rep("HE1",5), rep("JA2",5)),
  temp = round(runif(20)*15),
  NDVI = c(rep(c(48032730,48493073,48449380,48423773,48420000),4)),
  precip = round(runif(20)*15),
  date = lubridate::as_date(rep(c("2006-01-15", "2006-01-25", "2006-01-04", "2007-02-15", "2007-02-18", "2006-01-15", "2008-02-20", "2008-02-01", "2009-04-08", "2009-04-19"),2))
)

# 数据清洗与聚合
df_cleaned <- df %>%
  # 提取年份和月份,生成统一的年月分组标识
  mutate(year_month = floor_date(date, unit = "month")) %>%
  # 按位置、土地类型、年月分组(land同位置取值一致,不影响分组结果)
  group_by(long, lat, land, year_month) %>%
  # 对数值型变量计算月度均值,保留分类型变量唯一值
  summarise(
    insects_mean = mean(insects, na.rm = TRUE),
    temp_mean = mean(temp, na.rm = TRUE),
    NDVI_mean = mean(NDVI, na.rm = TRUE),
    precip_mean = mean(precip, na.rm = TRUE),
    .groups = "drop"
  )

# 验证分组结果的行数分布
df_cleaned %>%
  count(long, lat)

代码细节说明

  • floor_date(date, unit = "month"):将所有日期向下取整到当月第一天,确保同一月份的记录被归为同一组。
  • group_by(...):用位置信息、土地类型和年月作为分组依据,避免因分类型变量导致的额外分组。
  • summarise():针对数值型变量计算均值,na.rm = TRUE处理潜在缺失值;.groups = "drop"聚合后取消分组状态,方便后续数据操作。

结果验证

运行代码后,count(long, lat)的输出会与预期完全匹配:

  • 经度22.4、纬度-34.1:2行
  • 经度18.4、纬度-34.4:3行
  • 经度21.8、纬度-33.8:2行
  • 经度20.1、纬度-33.7:3行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:53