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

将dplyr中group_by、filter、min()转换为data.table遇阻求助

将dplyr分组筛选逻辑转换为data.table

原dplyr代码的作用是按var1分组,筛选出每组中var2等于该组最小值(忽略NA)的行。对应的data.table实现可以用以下两种方式:

方法一:直接在分组内筛选

library(data.table)
df.2 <- df.1[, .SD[var2 == min(var2, na.rm = TRUE)], by = var1]
  • by = var1:按var1对数据分组
  • .SD:代表当前分组的子数据集
  • min(var2, na.rm = TRUE):计算当前分组内var2的最小值(忽略NA值)
  • 最终筛选出子数据集中var2等于该最小值的行

方法二:先计算分组最小值再筛选

如果需要保留分组最小值的临时列,可分两步操作:

# 新增分组最小值列
df.1[, min_var2 := min(var2, na.rm = TRUE), by = var1]
# 筛选目标行
df.2 <- df.1[var2 == min_var2, .(var1, var2)]
# 若不需要临时列,可后续删除
df.1[, min_var2 := NULL]

测试示例

用测试数据验证结果一致性:

# 构造测试数据
df.1 <- data.table(
  var1 = c("A", "A", "B", "B", "B"),
  var2 = c(3, 1, NA, 2, 2)
)

# 执行转换后的代码
df.2 <- df.1[, .SD[var2 == min(var2, na.rm = TRUE)], by = var1]

输出结果:

var1 var2
1:    A    1
2:    B    2
3:    B    2

和原dplyr代码的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:54:25