如何在R语言data.table中按组筛选行并保留完整数据列
问题原因
你当前使用的data.table语法中,在j参数位置传入了逻辑判断表达式,同时指定了by分组规则,因此返回结果默认仅包含分组列+逻辑计算结果列V1,不会保留原表其他字段。
解决方案
写法1:一步返回符合条件的完整行
使用.SD指代每个分组内的子表,直接对.SD做行筛选即可保留需要的列:
baseT[ Zone.Type=='response_button_text' & Spreadsheet.Row %in% which(sst$randomise_trials==1), .SD[Reaction.Time > (median(Reaction.Time) + 3*mad(Reaction.Time))], by = c("Correct","Spreadsheet.Row") ]
如果仅需要保留ID等指定列,可添加.SDcols参数缩小计算范围、提升运行效率:
baseT[ Zone.Type=='response_button_text' & Spreadsheet.Row %in% which(sst$randomise_trials==1), .SD[Reaction.Time > (median(Reaction.Time) + 3*mad(Reaction.Time))], by = c("Correct","Spreadsheet.Row"), .SDcols = c("ID", "Reaction.Time") # 按需填入需要保留的列名即可 ]
写法2:先加筛选标记再筛选(灵活度更高,方便后续校验)
# 给原表新增分组内的异常值标记列 baseT[ Zone.Type=='response_button_text' & Spreadsheet.Row %in% which(sst$randomise_trials==1), is_outlier := Reaction.Time > (median(Reaction.Time) + 3*mad(Reaction.Time)), by = c("Correct","Spreadsheet.Row") ] # 筛选出符合条件的行,保留所有原始列 result <- baseT[is_outlier == TRUE]
内容的提问来源于stack exchange,提问作者Jinjin
相关产品推荐
相关产品推荐

