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

R语言按各测量组最低应答数筛选数据框子集的方法咨询

R数据筛选实现方案

核心判断逻辑

筛选以单个受试者+单个测试阶段为独立判断单元,仅保留同时满足以下两个条件的单元对应数据行:

  • 单元内Measure 1模块的3道题目中,至少1道为非NA的有效作答
  • 单元内Measure 2模块的3道题目中,至少1道为非NA的有效作答
    不符合条件的行直接剔除,对应给出的示例,剔除后共保留12行有效数据。

方法1:dplyr实现(推荐,适配大型数据集)

library(dplyr)

df_clean <- df %>%
  group_by(tester_ID, Phase) %>%
  filter(
    # 统计当前分组下Measure1的有效作答总数
    sum(!is.na(c_across(contains("Measure1")))) >= 1,
    # 统计当前分组下Measure2的有效作答总数
    sum(!is.na(c_across(contains("Measure2")))) >= 1
  ) %>%
  ungroup()

运行后会自动剔除两类无效行:Phase1阶段的A2(Measure2题目全为NA)、Phase2阶段的A6(Measure1题目全为NA),最终得到12行有效数据。

方法2:Base R实现(无需加载第三方包)

# 识别Measure1、Measure2对应的列位置
m1_cols <- grep("Measure1", colnames(df))
m2_cols <- grep("Measure2", colnames(df))

# 按受试者+阶段分组标记保留行
keep <- ave(
  rowSums(!is.na(df[, m1_cols])) >= 1 & rowSums(!is.na(df[, m2_cols])) >= 1,
  list(df$tester_ID, df$Phase),
  FUN = all
)

df_clean_base <- df[as.logical(keep), ]

结果校验

执行代码后可通过以下命令核对输出行数,确认筛选逻辑正确:

nrow(df_clean)
# 返回结果:[1] 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:21:19