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

在R中提取重复测量数据中指定标记行及前后特定行

解决方案

假设你的数据框名为df,包含boar_id(公猪ID)、measurement_ID(连续测量ID)、reject(标记列)等字段,可通过以下步骤实现需求:

  1. 按公猪分组并按measurement_ID排序,确保每组内数据按测量顺序排列
  2. 标记出每组中reject == "blood"的行位置
  3. 筛选出所有落在目标行前1行到后3行范围内的记录

代码实现

library(dplyr)

final_df <- df %>%
  # 按公猪分组处理
  group_by(boar_id) %>%
  # 组内按measurement_ID升序排列,保证顺序正确
  arrange(measurement_ID, .by_group = TRUE) %>%
  mutate(
    # 生成组内行号,用于定位
    row_idx = row_number(),
    # 提取当前组中所有reject为"blood"的行的位置
    blood_rows = which(reject == "blood"),
    # 判断当前行是否在目标范围内:行号处于任意blood行的[-1, +3]区间
    to_keep = sapply(row_idx, function(x) any(between(x, blood_rows - 1, blood_rows + 3)))
  ) %>%
  # 筛选需要保留的行
  filter(to_keep) %>%
  # 移除临时辅助列
  select(-row_idx, -blood_rows, -to_keep) %>%
  ungroup()

关键说明

  • 必须先按boar_id分组再排序,确保每个公猪的测量数据是连续有序的
  • 用row_number()生成组内相对位置,替代日期作为排序依据,避免日期格式问题
  • between()函数自动处理边界情况:比如目标行是组内第一行时,不会错误提取不存在的前1行;目标行是组内最后几行时,仅提取存在的后续行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:55:19