r - 在 R 中更新 data.table 中的整行

标签 r data.table

我在 R 中有一个 data.table 对象,它有 9,000 列。我的代码一次计算所有 9,000 列的新值并返回一个值向量。我想一次用所有值替换 data.table 中的行。在 dataFrame 对象中,这很容易。但是,我不知道如何让它在 data.table 中工作。

d <- data.table(q=c(1,2,3,4,5,6,7,8,9), x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
d[q==1, := c(5,5,5,5)] # FAILS
d[q==1, ] <- c(5,5,5,5) # FAILS

知道如何一次有效地更新整行吗?

最佳答案

您可以使用 names(d)对于 LHS,然后使用 as.list为了将您的向量转换为列表,所以 data.table将理解它需要将每个值分配给不同的列,而不是将所有值分配给每列。

您也在转换 character矢量到 numeric这里(x 列),所以 data.table将返回警告以确保您知道这一点。

vec <- c(5, 5, 5, 5)
d[q == 1L, names(d) := as.list(vec)][]
#    q x y v
# 1: 5 5 5 5
# 2: 2 a 3 2
# 3: 3 a 6 3
# 4: 4 b 1 4
# 5: 5 b 3 5
# 6: 6 b 6 6
# 7: 7 c 1 7
# 8: 8 c 3 8
# 9: 9 c 6 9

关于r - 在 R 中更新 data.table 中的整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29647081/

相关文章:

r - 如何按行更新 R data.table 的所有列?

基于R中条件的滚动平均值

r - 从 R Shiny renderTable 中排除行名称

r - 加速 R 函数

r - 所有预定义元素集发生后分割向量

performance - 如何使用 data.table 提高当前使用 ddply 的数据清理代码的性能?

mysql - 使用 MySQL 和/或 R 在多个日期范围内有效地汇总数据

r - 重叠具有不同变量的ggplot2直方图

r - 对于 lmer 模型,我可以提取整个模型的 'y' 的拟合值吗

r - 将 NA 移到底部