在这question中,data.table包创建者解释了为什么不能在中间A data.table中插入引用(或删除).他还指出,在谈判结束时,这种行动是可能的.你能给我一个执行这个动作的代码吗?这将是"参考"版本的

a<- data.table(id=letters[1:2], var=1:2)
> a
   id var
1:  a   1
2:  b   2
> rbind(a, data.table(id="c", var=3))
   id var
1:  a   1
2:  b   2
3:  c   3

谢谢

EDIT:

由于还不可能找到合适的解决方案,从速度和内存使用的Angular 来看,以下哪项更好(如果内部不同,则不确定)?

rbind(a, data.table(id="c", var=3))

rbindlist(list(a,  data.table(id="c", var=3)))

最终还有其他(更好的)方法吗?

推荐答案

要编辑基准,只需执行以下操作:

a = data.table(id=letters[1:2], var=1:2)
b = copy(a)
c = copy(b) # let's also just try modifying same value in place
            # to see how well changing existing values does
microbenchmark(a <- rbind(a, data.table(id="c", var=3)),
               b <- rbindlist(list(b,  data.table(id="c", var=3))),
               c[1, var := 3L],
               set(c, 1L, 2L, 3L))
#Unit: microseconds
#                                                  expr     min        lq    median        uq      max neval
#          a <- rbind(a, data.table(id = "c", var = 3)) 865.460 1141.2585 1357.1230 1539.4300 6814.492   100
#b <- rbindlist(list(b, data.table(id = "c", var = 3))) 260.440  325.3835  445.4190  522.8825 1143.930   100
#                                   c[1, `:=`(var, 3L)] 482.147  626.5570  778.3135  904.3595 1109.539   100
#                                    set(c, 1L, 2L, 3L)   2.339    5.677    7.5140    9.5170   19.033   100

rbindlist显然比rbind好.多亏Matthew Dowle指出了在循环中使用[的问题,我添加了另一个基准测试set.

从上面可以看出,你最好的 Select 是使用rbindlist,或者先调整data.table的大小,然后填充值(你也可以使用与C++中的std::vector类似的策略,如果你不知道数据的大小,那么每次用完空间时都会将大小加倍,然后在填充完数据后,删除多余的行).

R相关问答推荐

从R中的地址提取街道名称

Select R中列未排序的收件箱中的最后一个按顺序编号的列

插入指示行之间时间间隔的新行

R gtsummary tBL_summary,包含分层和两个独立分组变量

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

随机森林回归:下拉列重要性

使用gcuminc,如何使用逗号格式化风险表?

将嵌套列表子集化为嵌套列表

计算具有奇数日期的运行金额

计算时间段的ECDF(R)

在ggplot中为不同几何体使用不同的 colored颜色 比例

找出二叉树中每个 node 在R中的深度?

plotly hover文本/工具提示在shiny 中不起作用

如何将R中数据帧中的任何Nas替换为最后4个值

函数可以跨多个列搜索多个字符串并创建二进制输出变量

Geom_arcbar()中出错:找不到函数";geom_arcbar";

将具有坐标列表列的三角形转换为多个多边形

删除在R中的write.table()函数期间创建的附加行

使用R、拼图和可能的网格包绘制两个地块的公共垂直线

如何将字符类对象中的数据转换为R中的字符串