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

按收获年份统计VHI低于40的月份数(含数据集及尝试代码)

解决方法:按harvestYear统计vhi≤40的月份数并新增列

问题分析

你之前的代码存在三个核心问题:

  • 错误使用yearmon作为分组依据,需求是按**harvestYear(结合区域唯一标识:gid、country、xcoord、ycoord)**分组,而非单个年月
  • 将vhi纳入分组变量,导致每个不同vhi值单独分组,无法正确统计全年干旱月份数
  • vhi列是字符类型,直接做数值比较会产生逻辑错误,需先转换为数值型

正确实现代码

方法1:使用dplyr(推荐,语法更清晰)

library(dplyr)

# 1. 转换vhi为数值型,修复数据类型问题
df_clean <- df2 %>%
  mutate(vhi = as.numeric(vhi))

# 2. 按区域-年份分组,新增统计列(保留原数据集所有行)
df_result <- df_clean %>%
  group_by(gid, country, xcoord, ycoord, harvestYear) %>%
  mutate(drought_months = sum(vhi <= 40, na.rm = TRUE)) %>%
  ungroup()

方法2:使用plyr(适配你之前的代码习惯)

library(plyr)

# 1. 转换vhi为数值型
df2$vhi <- as.numeric(df2$vhi)

# 2. 按区域-年份分组,新增统计列
df_result <- ddply(df2, .(gid, country, xcoord, ycoord, harvestYear), 
                   transform, drought_months = sum(vhi <= 40, na.rm = TRUE))

效果说明

  • 新增的drought_months列会将对应区域-年份下vhi≤40的月份数量填充到该组的每一行,完全保留原数据集的结构
  • 示例中1982年gid=100468的分组,vhi≤40的月份有3个,所以该组所有行的drought_months值均为3,符合你的预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:18:09