如何基于两列注意力检查响应移除R数据框中的指定行?
解决注意力检查数据筛选问题
首先明确核心需求:只删掉两个注意力题都不合格的行(即第一题跳过/答错,同时第二题也跳过/答错),只要有一题合格就保留。
你之前的代码只判断了是否为NA,没考虑"答错"的情况,逻辑不完整。下面给你两种可行的写法:
方法一:正向筛选(保留至少一题合格的行)
先定义每题合格的条件:
- 第一题合格:非NA且等于"2"
- 第二题合格:非NA且等于"5"
用base R实现:
# 筛选出至少一题合格的行 data_clean <- data[(!is.na(data$Attention.Check.1) & data$Attention.Check.1 == "2") | (!is.na(data$Information.5) & data$Information.5 == "5"), ]
用dplyr(tidyverse工具包)实现(如果习惯管道语法):
library(dplyr) data_clean <- data %>% filter((!is.na(Attention.Check.1) & Attention.Check.1 == "2") | (!is.na(Information.5) & Information.5 == "5"))
方法二:反向排除(删掉两题都不合格的行)
先定义每题不合格的条件:
- 第一题不合格:是NA 或者 不等于"2"
- 第二题不合格:是NA 或者 不等于"5"
然后排除同时满足两个不合格条件的行:
# 排除两题都不合格的行 data_clean <- data[!((is.na(data$Attention.Check.1) | data$Attention.Check.1 != "2") & (is.na(data$Information.5) | data$Information.5 != "5")), ]
为什么你之前的代码不对?
你写的!is.na(data$Attention.Check.1) | !is.na(data$Information_5)只判断了"是否没跳过",但没考虑"是否答对"。比如某行第一题答错(不是NA但不是"2")、第二题跳过(NA),你的代码会保留它,但实际上这行属于"两题都不合格",应该被删掉。上面的两种写法都同时考虑了"跳过"和"答错"两种不合格情况,完全符合你的需求。
内容的提问来源于stack exchange,提问作者vx180
相关产品推荐
相关产品推荐

