gpt4 book ai didi

r - R data.table 单元格的矢量化分配,列按行不同

转载 作者:行者123 更新时间:2023-12-02 06:50:24 24 4
gpt4 key购买 nike

我在考虑如何通过引用有效地分配 data.table 的各个单元格时遇到问题。每列(除了 id)都表示受试者在特定日期的状态。

为了便于说明,每行要切换的列存储在单独的列表或向量中。以下 for 循环完成了这项工作,但实际数据非常大(因此也通过引用分配),更理想的解决方案是更原生的解决方案。

dt = data.table(id = letters[1:5],
`1`=0,`2`=0,`3`=0)

d = c(3,2,1,2,3)

for (i in 1:nrow(dt)) {
print(d[i])
dt[i,1+d[i] := 1]
}

print(dt)
# id 1 2 3
# 1: a 0 0 1
# 2: b 0 1 0
# 3: c 1 0 0
# 4: d 0 1 0
# 5: e 0 0 1

我尝试使用 .SD 或 .I 的所有操作都失败了,也许有人可以为我指明正确的方向?

例如

dt[,d[.I] := 1]

最佳答案

我会在列而不是行的 for 循环中使用 set:=:

for(i in seq_along(dt)[-1]){
set(dt, NULL, i, 0 + (d == i - 1))
}
dt
# id 1 2 3
# 1: a 0 0 1
# 2: b 0 1 0
# 3: c 1 0 0
# 4: d 0 1 0
# 5: e 0 0 1

关于r - R data.table 单元格的矢量化分配,列按行不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46019414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com