gpt4 book ai didi

r - 在keyed data.table 中,更改某个 `where` 处的key 变量的值会将key 设置为 `NULL`

转载 作者:行者123 更新时间:2023-12-04 11:58:59 25 4
gpt4 key购买 nike

我想问一下,当我在某个 where 处更改键变量的值时,为什么下面示例中的 data.table 会丢失其键子集。以及是否有必要。

library(data.table)
example(data.table)
setkey(DT,x) # one key var only
DT[J("a"), x := "z"]
DT
x y v v2 m
1: z 1 13 84 5
2: z 3 13 84 5
3: z 6 13 84 5
4: c 1 7 NA 8
5: c 3 8 NA 8
6: c 6 9 NA 8
7: z 1 42 NA 42
8: z 3 42 NA 42
9: z 6 42 NA 42

所以这很好用。但是,我丢失了我的 key :
key(DT)
NULL

我想通过重新分配键列 x上面的键被删除。也许应该记住 key ,即应该有一个隐含的 setkey(DT,x)保留 x作为关键?谢谢!

我使用的是 1.8.6 版。顺便一提。

最佳答案

来自 setkey的帮助文件:

‘setkey()’ sorts a ‘data.table’ and marks it as sorted. [...] The columns are sorted in ascending order always.



当您替换任何键控列中的元素时, data.table不再订购(或至少不能保证订购),因此 key 未设置以反射(reflect)已更改的现实。

一个简单的解决方案是立即重置 key :
## Creates the example data.table
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT, 'x')

## Immediately resets the (possibly multicolumn) key
setkeyv(DT["a", x:="z"], key(DT))

key(DT)
# [1] "x"

关于r - 在keyed data.table 中,更改某个 `where` 处的key 变量的值会将key 设置为 `NULL`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365621/

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