首页 > 解决方案 > R:通过引用分配的链接子集修改data.table不起作用

问题描述

我得到了一个 data.table ,我需要从中获取不同的子集,并且我需要从每个子集中对行进行采样并为采样的行分配一个值。这个分配的值也应该出现在原始 data.table 中(通过引用修改)。

我尝试了以下没有错误但不起作用的方法:

require(data.table)
dt <- data.table(a=c(1,2,3,1,2,3), s=logical())
print(dt[a==2][sample(.N,1)][, s := TRUE]) # No value is assigned to s.
print(dt) # Here the assigned logical values should be present too.

编辑:akrun 在第一条评论中建议的解决方案很接近,但在 for 循环中使用并不能提供所需的结果,并且只更改 dt 中的逻辑列两次而不是三次。

for (i in unique(dt$a)) {
  dt[dt[a==i, .I[sample(.N, 1)]], s := TRUE]
} 

这是为什么?

标签: rreferencedata.table

解决方案


推荐阅读