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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:08