gpt4 book ai didi

r - 使用 .SD 在 data.table 中进行持久分配

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

挣扎 data.table 中的.SD 调用。

特别是,我试图在一组数据中识别一些逻辑特征,并在另一个变量中绘制一些识别标记。 .SD 的规范应用,对吗?

来自常见问题解答 4.5,http://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.pdf ,想象下表:

library(data.table) # 1.9.5

DT = data.table(a=rep(1:3,1:3),b=1:6,c=7:12)
DT[,{ mySD = copy(.SD)
mySD[1, b := 99L]
mySD },
by = a]
## a b c
## 1: 1 99 7
## 2: 2 99 8
## 3: 2 3 9
## 4: 3 99 10
## 5: 3 5 11
## 6: 3 6 12

我已将这些值分配给 b(使用“:=”运算符),因此当我重新调用 DT 时,我期望得到相同的输出。但是,出乎意料的是,我遇到了原始表格:

DT
## a b c
## 1: 1 1 7
## 2: 2 2 8
## 3: 2 3 9
## 4: 3 4 10
## 5: 3 5 11
## 6: 3 6 12

预期输出是原始帧,在“b”中进行了持续修改:

DT
## a b c
## 1: 1 99 7
## 2: 2 99 8
## 3: 2 3 9
## 4: 3 99 10
## 5: 3 5 11
## 6: 3 6 12

当然,我可以将此表复制到另一个表中,但这似乎与精神不符。

DT2 <- copy(DT[,{ mySD = copy(.SD)
mySD[1, b := 99L]
mySD },
by = a])
DT2
## a b c
## 1: 1 99 7
## 2: 2 99 8
## 3: 2 3 9
## 4: 3 99 10
## 5: 3 5 11
## 6: 3 6 12

感觉好像我在这里缺少一些基本的东西。

最佳答案

提到的常见问题只是展示了如何修改(临时副本).SD 的解决方法,但它不会更新您的原始数据地点。您问题的可能解决方案是

DT[DT[, .I[1L], by = a]$V1, b := 99L]
DT
# a b c
# 1: 1 99 7
# 2: 2 99 8
# 3: 2 3 9
# 4: 3 99 10
# 5: 3 5 11
# 6: 3 6 12

关于r - 使用 .SD 在 data.table 中进行持久分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956167/

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