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

基于列条件使用dplyr对重复测量数据框进行分组筛选

看起来你已经有了分组的思路,现在只需要在分组内根据Pheno的值来筛选对应的行就行。我来帮你完善代码,用dplyr就能轻松实现你的需求。

首先,结合你给出的理想结果,你的核心需求应该是:每个ID分组里,如果存在Pheno=1的行,就选其中Week最小的那一行;如果该分组只有Pheno=0的行,就选其中Week最大的那一行。

下面是具体的实现代码:

library(dplyr)

# 假设你的原始数据框名为data
df_sub <- data %>%
  group_by(ID) %>%
  filter(
    # 筛选Pheno=1且为该组内最小Week的行
    (Pheno == 1 & Week == min(Week[Pheno == 1])) |
    # 当组内全是Pheno=0时,筛选Week最大的行
    (all(Pheno == 0) & Pheno == 0 & Week == max(Week))
  ) %>%
  ungroup()

如果你需要更灵活的处理——比如某些ID分组里同时存在Pheno=0和Pheno=1的行,想要同时保留Pheno=1的最小Week行和Pheno=0的最大Week行(每个ID可能对应两行结果),可以用下面的代码:

df_sub <- data %>%
  group_by(ID, Pheno) %>%
  filter(
    # 根据Pheno值选择对应极值的行
    if_else(Pheno == 1, Week == min(Week), Week == max(Week))
  ) %>%
  ungroup()

代码解释:

  1. group_by(ID):按个体ID分组,确保筛选逻辑在每个个体的重复测量数据范围内执行。
  2. filter()条件:
    • 第一部分针对Pheno=1的行,精准筛选出该组内Week最小的记录;
    • 第二部分先判断该组是否全为Pheno=0的行,若是则筛选出Week最大的记录。
  3. ungroup():取消分组,将结果还原为普通数据框结构,方便后续操作。

运行这段代码后,应该就能得到你想要的理想筛选结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:12:42