rbind `data.tables`并保留 key

标签 r indexing data.table

我正在寻找与插入已键入键的SQL表类似的行为,在该表中,将添加的新行插入到现有键中。例如,在这种情况下:

dt <- data.table(a=1:10)
setkey(dt, a)
tables()
#      NAME NROW MB COLS KEY
# [1,] dt     10 1  a    a  
dt.2 <- rbindlist(list(dt, data.table(a=1:5)))
tables()
#      NAME NROW MB COLS KEY
# [1,] dt     10 1  a    a  
# [2,] dt.2   15 1  a      

我想选择dt.2dt“继承” key (显然是用增量数据更新),而不是没有实际发生的 key 。

首先,我对丢失 key 感到有些惊讶,但这显然是记录在案的行为。

是否有一种干净的方法来执行此操作,而无需在每个setkey/rbind之后都调用rbindlist

最佳答案

本质上,data.table目前根本不支持行插入,更不用说在键控表中了。 rbind创建一个新的data.table,因此效率不高或内存效率低。

类似的问题在这里:

How to delete a row by reference in data.table?

当前,典型的工作流程是使用freadrbindlist将它们一起从磁盘加载文件,或者使用RODBC或类似方法从数据库加载数据。

我们想添加快速行插入,但尚未完成。

关于rbind `data.tables`并保留 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097068/

相关文章:

r - 如何计算R中线性模型的 'Coefficient of determination'?

r - 使用 rpart 选择决策树修剪的 CP 值

按距离以外的其他方式对 MongoDB GeoNear 结果进行排序?

具有 10+ 百万行的 MySQL 表 - 如何使用索引加快搜索速度?

r - 加入多个条件时的奇怪行为

r - 使用 SNP 等位基因数据为 ACGT 创建概率矩阵

r - 转换数据矩阵 R 中的成对列

r - 在矩阵 B 中查找来自矩阵 A 的行的索引

r - 将重复的列集收集到单个列中

r - 如何 Cbind data.table 和 vector