在R中更新data.table中的整行。

我在R中有一个data.table对象,它有9,000列。 我的代码一次计算所有9000列的新值,并返回一个值的向量。 我想一次性用所有的值替换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

给TA打赏
共{{data.count}}人
人已打赏
未分类

2022-9-8 17:47:39

未分类

vuex状态下应该初始化哪种类型的数据,什么时候初始化?

2022-9-8 17:58:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索