【问题标题】:Assign a vector to a specific existing row of data table in R将向量分配给 R 中特定的现有数据表行
【发布时间】:2016-06-04 17:37:59
【问题描述】:

我一直在查看教程和文档,但还没有弄清楚如何将所有列的值向量分配给 data.table 中的一个现有行。

我从一个空的data.table 开始,它已经具有正确的列数和行数:

dt <- data.table(matrix(nrow=10, ncol=5))

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

vec <- rnorm(5)

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

【问题讨论】:

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

标签: r data.table


【解决方案1】:

首先您需要获取正确的列类型,因为您创建的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)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多