在R中为数据表的特定现有行分配一个向量。

7
我一直在查看教程和文档,但还没有找出如何将一个值向量分配给data.table中的一个已存在的行的所有列。
我从一个空的data.table开始,它已经有了正确数量的列和行:
dt <- data.table(matrix(nrow=10, ncol=5))

现在我对data.table之外的一行计算一些值,并将它们放入一个向量vec中,例如:

vec <- rnorm(5)

我该如何将vec的值分配给data.table的第一行,同时实现良好的性能(因为我还想逐步填充其他行)?

由于您在性能方面使用了data.table(如下面一个答案的评论中所述),我认为一遍又一遍地添加(许多)行根本不高效,因为data.table(像data.frame一样)是列存储,而不是行存储(这意味着每当您添加一行时,必须访问内存中的不同位置)。需要添加行的原因(算法)是什么? - R Yoda
我正在创建一个非常大的空表格(11千行x 8千列),然后进行一些计算以创建一个向量,然后逐行使用该向量填充此表格。我认为使用data.table可能比使用矩阵或数据框更快。 - Pascal
好的,我认为使用这种方式 data.table 更快,因为你预先分配所需的内存(表大小),并通过引用覆盖行(如果您使用 Richard 的答案和 := 运算符)来修改行,因此该解决方案不会因为您修改一个值而复制整个数据。我可以编辑您的问题以澄清确切的用例吗? - R Yoda
1个回答

11

首先,您需要获得正确的列类型,因为您创建的 NA 矩阵是逻辑型的。通过将数字分配给它们,列类型不会神奇地更改。

dt[, names(dt) := lapply(.SD, as.numeric)] 

然后您可以使用以下方式更改第一行的值

dt[1, names(dt) := as.list(vec)]

话虽如此,如果你从一个数值矩阵开始,就不必更改列类型。

dt <- data.table(matrix(numeric(), 10, 5))
dt[1, names(dt) := as.list(vec)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接