R data.table按分组条件去重:保留非空答案及全空组空值行
R实现问卷数据按分组过滤空值的方案
方案1:data.table原生语法(推荐,匹配你的数据结构)
你的原始数据已经是data.table类,直接使用分组过滤逻辑即可:
library(data.table) # 核心处理逻辑 result <- dt[, .SD[!(any(Answer != "") & Answer == "")], by = .(ID, Question)] # 查看结果 result
逻辑说明:
- 以
ID+Question为分组单位,先判断当前组是否存在非空的有效答案 - 如果组内有有效答案:过滤掉组内所有
Answer == ""的空值行,所有非空有效答案全部保留 - 如果组内所有Answer都是空值:不做过滤,保留组内全部行
方案2:tidyverse(dplyr)语法
如果你习惯使用tidyverse栈,可使用以下代码实现:
library(dplyr) result <- dt %>% group_by(ID, Question) %>% filter(!(any(Answer != "") & Answer == "")) %>% ungroup()
运行上述任意一种方案,得到的结果都和你期望的输出完全一致。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

