我在 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/