r - data.table:索引子集
问题描述
在下面的数据表中,我想从列中选择具有唯一id
值和最小值的行pos2
:
dt = data.table(id = c(1,2,2,3,3,3),
pos1 = c(0.1, 0.2, 0.2, 0.3, 0.3, 0.3),
pos2 = c(0.1, 0.25, 0.21, 0.34, 0.31, 0.32))
id pos1 pos2
1: 1 0.1 0.10
2: 2 0.2 0.25
3: 2 0.2 0.21
4: 3 0.3 0.34
5: 3 0.3 0.31
6: 3 0.3 0.32
我现在这样做的方式是创建一个中间表:
dt.red = dt[, .(pos2 = first(sort(pos2))), by = id]
id pos2
1: 1 0.10
2: 2 0.21
3: 3 0.31
然后我合并以获得所需的最终结果:
merge(dt, dt.red)
id pos2 pos1
1: 1 0.10 0.1
2: 2 0.21 0.2
3: 3 0.31 0.3
有没有一种更简洁的方法可以通过 data.table 实现这一目标?
解决方案
也可以在没有 的情况下执行此操作.I
,但会更慢*
dt[order(pos2), head(.SD, 1), id]
# id pos1 pos2
# 1: 1 0.1 0.10
# 2: 2 0.2 0.21
# 3: 3 0.3 0.31
*或者可能不是,请参阅下面的评论
推荐阅读
- oracle - 将 Neo4J 数据导入 Oracle 关系数据库
- lotus-notes - 外出 - 不自动回复发送给群组的邮件
- java - 将方法从文件转换为 LambdaExpression
- sql - SQL server 中的 String_agg 等效函数
- r - 如何在ggplot中写化学式
- php - Firebase , android 和 PHP 后端
- javascript - 如何将 componentDidMount() 和 componentWillUnmount 转换为 useEffect()?
- python - 使用 Python 访问命令提示符以实现自动化流程
- windows - 如何在没有 anaconda-clean 的情况下彻底清除 anaconda?
- java - 停止 UI 方法,直到异步任务完成