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

在R中筛选两次访视符合指定条件的受试者ID

数据集筛选需求说明

现有包含3个字段的纵向数据集:

  • 受试者ID:唯一标识每个受试者
  • 访视次数(Visit):仅包含1、2两个取值,对应两次访视记录
  • 观测变量(Var):数值型变量,可能存在缺失值

需要筛选满足以下任意一个条件的ID:

  1. 第2次访视时Var为缺失值
  2. 两次访视Var取值发生1和2的互换:即第1次为1、第2次为2,或第1次为2、第2次为1

示例数据集结构如下:

ID Visit Var
1    1   2
1    2   2
2    1   1
2    2   2
3    1   2
3    2   1
4    1   2
4    2   NA  

上述示例中符合要求的ID为:2、3、4


R语言实现方案

基于tidyverse生态的实现代码:

library(tidyverse)

# 构造示例数据
df <- tibble(
  ID = c(1,1,2,2,3,3,4,4),
  Visit = c(1,2,1,2,1,2,1,2),
  Var = c(2,2,1,2,2,1,2,NA)
)

# 筛选符合要求的ID
result_id <- df %>%
  group_by(ID) %>%
  arrange(Visit) %>% # 避免原始数据访视顺序混乱
  filter(
    # 条件1:第二次访视Var为缺失
    is.na(nth(Var, 2)) |
    # 条件2:两次Var为1和2互换
    (nth(Var,1) == 1 & nth(Var,2) ==2) |
    (nth(Var,1) ==2 & nth(Var,2) ==1)
  ) %>%
  pull(ID) %>%
  unique()

print(result_id)
# 输出结果:2 3 4

Python实现方案

基于Pandas的实现代码:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'ID': [1,1,2,2,3,3,4,4],
    'Visit': [1,2,1,2,1,2,1,2],
    'Var': [2,2,1,2,2,1,2, np.nan]
})

def check_condition(group):
    group = group.sort_values('Visit')
    var1 = group.iloc[0]['Var']
    var2 = group.iloc[1]['Var']
    # 判断是否满足任意筛选条件
    if pd.isna(var2):
        return True
    if (var1 == 1 and var2 ==2) or (var1 ==2 and var2 ==1):
        return True
    return False

# 筛选符合要求的ID
result_id = df.groupby('ID').filter(check_condition)['ID'].unique()
print(result_id)
# 输出结果:array([2, 3, 4], dtype=int64)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:15:05