gpt4 book ai didi

r - 设置data.table `(group, -value.1)`的显示顺序,同时保留key `id`

转载 作者:行者123 更新时间:2023-12-04 20:42:29 24 4
gpt4 key购买 nike

是否可以存储 order data.table 中的行数同时保留其 key ?

假设我有以下虚拟表:

library(data.table)
dt <- data.table(id=letters[1:6],
group=sample(c("red", "blue"), replace=TRUE),
value.1=rnorm(6),
value.2=runif(6))
setkey(dt, id)
dt
id group value.1 value.2
1: a blue 1.4557851 0.73249612
2: b red -0.6443284 0.49924102
3: c blue -1.5531374 0.72977197
4: d red -1.5977095 0.08033604
5: e blue 1.8050975 0.43553048
6: f red -0.4816474 0.23658045

我想存储此表,以便按 group 对行进行排序,由 value.1按降序排列,即:
> dt[order(group, value.1, decreasing=T),]
id group value.1 value.2
1: f red -0.4816474 0.23658045
2: b red -0.6443284 0.49924102
3: d red -1.5977095 0.08033604
4: e blue 1.8050975 0.43553048
5: a blue 1.4557851 0.73249612
6: c blue -1.5531374 0.72977197

显然我可以将它保存为一个新变量,但我也想保留 id column 作为我的主键。

阿伦对 "What is the purpose of setting a key in data.table?" 的回答表明这可以通过巧妙使用来实现 setkey ,因为它按照键的顺序对 data.table 进行排序(尽管没有将键设置为降序的选项):
> setkey(dt, group, value.1, id)
> dt
id group value.1 value.2
1: c blue -1.5531374 0.72977197
2: a blue 1.4557851 0.73249612
3: e blue 1.8050975 0.43553048
4: d red -1.5977095 0.08033604
5: b red -0.6443284 0.49924102
6: f red -0.4816474 0.23658045

但是,我失去了使用 id 的能力作为我的主键,因为 group是提供的第一个键:
> dt["a"]
group id value.1 value.2
1: a NA NA NA

最佳答案

听起来您只是想修改 print.data.table :

print.data.table = function(x, ...) {
# put whatever condition identifies your tables here
if ("group" %in% names(x) && "value.1" %in% names(x)) {
data.table:::print.data.table(x[order(group, value.1, decreasing = T)], ...)
} else {
data.table:::print.data.table(x, ...)
}
}

set.seed(2)
dt = data.table(id=letters[1:6],
group=sample(c("red", "blue"), replace=TRUE),
value.1=rnorm(6),
value.2=runif(6))
setkey(dt, id)
dt
# id group value.1 value.2
#1: a red 0.18484918 0.40528218
#2: e red 0.13242028 0.44480923
#3: c red -1.13037567 0.97639849
#4: b blue 1.58784533 0.85354845
#5: f blue 0.70795473 0.07497942
#6: d blue -0.08025176 0.22582546

dt["c"]
# id group value.1 value.2
#1: c red -1.130376 0.9763985

关于r - 设置data.table `(group, -value.1)`的显示顺序,同时保留key `id`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691321/

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