我正在寻找类似于插入已经键入的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
时,是否有一种干净的方式来执行此操作?
答案 0 :(得分:8)
基本上,data.table
目前根本不支持行插入,更不用说进入键控表了。 rbind
会创建一个新的data.table
,因此速度不快或内存效率不高。
类似的问题在这里:
How to delete a row by reference in data.table?
目前,典型的工作流程是使用fread
和rbindlist
从磁盘加载文件,或使用RODBC或类似工具从数据库加载数据。
我们想添加快速行插入,但尚未完成。