我正在寻找与插入已键入键的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
“继承” key (显然是用增量数据更新),而不是没有实际发生的 key 。首先,我对丢失 key 感到有些惊讶,但这显然是记录在案的行为。
是否有一种干净的方法来执行此操作,而无需在每个
setkey
/rbind
之后都调用rbindlist
?
最佳答案
本质上,data.table
目前根本不支持行插入,更不用说在键控表中了。 rbind
创建一个新的data.table
,因此效率不高或内存效率低。
类似的问题在这里:
How to delete a row by reference in data.table?
当前,典型的工作流程是使用fread
和rbindlist
将它们一起从磁盘加载文件,或者使用RODBC或类似方法从数据库加载数据。
我们想添加快速行插入,但尚未完成。
关于rbind `data.tables`并保留 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097068/