rbind`data.tables`并保存密钥

时间:2014-01-13 17:02:59

标签: 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.2“继承”来自dt的密钥(显然是使用增量数据更新),而不是实际发生的密钥。

起初我对丢失密钥感到有些惊讶,但这显然是记录在案的行为。

在每个setkey / rbind之后调用rbindlist时,是否有一种干净的方式来执行此操作?

1 个答案:

答案 0 :(得分:8)

基本上,data.table目前根本不支持行插入,更不用说进入键控表了。 rbind会创建一个新的data.table,因此速度不快或内存效率不高。

类似的问题在这里:

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

目前,典型的工作流程是使用freadrbindlist从磁盘加载文件,或使用RODBC或类似工具从数据库加载数据。

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