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

R语言实现分组数据条件行删除,生成终端观测数据集

R语言筛选终端观测数据集解决方案

核心逻辑

按year和tree.id分组,对每组内pa=0的观测,仅保留week值最大的行(删除同组内pa=0且week较小的行);pa≠0的观测全部保留。

可行代码(基于dplyr)

library(dplyr)

# 处理数据集,得到终端观测
terminal_obs_final <- terminal.obs.fr %>%
  group_by(year, tree.id) %>%
  # 筛选规则:要么pa不等于0,要么是当前组pa=0观测中week最大的行
  filter(pa != 0 | week == max(week[pa == 0], na.rm = TRUE)) %>%
  ungroup()

代码说明

  • group_by(year, tree.id):按年份和树ID分组,确保每组内是同一棵树同一年的观测
  • max(week[pa == 0], na.rm = TRUE):仅计算当前组内pa=0观测的最大week值,na.rm=TRUE避免空值报错
  • filter():筛选出符合条件的行,保留所有pa≠0的观测,以及pa=0中week最大的观测
  • ungroup():取消分组,返回普通数据框

你之前代码的问题

你尝试用ifelse直接结合group_by的写法不符合dplyr的语法逻辑,group_by后需要用dplyr的分组操作函数(如filter、slice)来处理每组数据,而非基函数ifelse。

另一种简洁写法(用slice_max)

如果你的需求是对每个pa状态都取对应组的最大week行,也可以用以下写法:

terminal_obs_final <- terminal.obs.fr %>%
  group_by(year, tree.id, pa) %>%
  slice_max(week, n = 1) %>%
  ungroup()

这种写法会对(year, tree.id, pa)组合分组,每组仅保留week最大的一行,适合更通用的分组取极值场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:07:26