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

如何用dplyr和tidyr删除首次评估含NA的ID所有观测?

解决方案:删除首次评估含NA的ID的所有观测

针对你的需求,这里提供两种基于dplyr的实现方式,都能达到排除首次评估(assessment == 1)存在任意NA值的ID的所有记录的目的:

方法一:分组后直接过滤

通过按id分组,直接检查每组首次评估行中指定列是否存在NA,保留无NA的组:

library(dplyr)

cleaned_dataset <- dataset %>%
  group_by(id) %>%
  # 检查首次评估时scoreA和scoreB是否无任意NA
  filter(!any(is.na(c_across(scoreA:scoreB))[assessment == 1])) %>%
  ungroup()

代码说明:

  • group_by(id):按ID分组处理每个个体的所有记录
  • c_across(scoreA:scoreB):选中需要检查NA的分数列
  • [assessment == 1]:仅提取该组中首次评估的行数据
  • !any(is.na(...)):判断该组首次评估的行是否不存在任何NA,满足条件则保留整个组的记录

方法二:先筛选有效ID再过滤

先找出所有首次评估时无NA的ID列表,再用该列表过滤原数据集,逻辑更直观:

library(dplyr)

# 提取首次评估时scoreA和scoreB均无NA的ID
valid_ids <- dataset %>%
  filter(assessment == 1) %>%
  filter(!is.na(scoreA) & !is.na(scoreB)) %>%
  pull(id)

# 用有效ID过滤原数据集
cleaned_dataset <- dataset %>%
  filter(id %in% valid_ids)

代码说明:

  • 第一步先筛选出所有首次评估的记录,再过滤掉存在NA的行,最后提取这些有效ID
  • 第二步用id %in% valid_ids保留所有有效ID的全部观测

结果验证

处理后的cleaned_dataset将仅包含ID 1、3、4的所有记录,ID 2和5的所有观测已被排除,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:55:07