gpt4 book ai didi

r - 在 R 的 data.table 中,data.table 的键如何保存到使用 .SD 引用的子集中?

转载 作者:行者123 更新时间:2023-12-04 20:34:57 28 4
gpt4 key购买 nike

我正在使用 data.table包来完成一些分析。我正在采取的步骤之一是使用 by =函数来获取聚合统计信息。但是,必须根据每个 by 中的唯一结果计算聚合。子集。我一直在用unique和 key 确保每个by组由不同的记录组成。像下面这样模糊的东西:

dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var]

我注意到 .SD 上的 key 似乎因 dt_old 的 key 集而异和 by =陈述。显然,这会影响我生成的子集是否唯一。

我想弄清楚一些,所以我写了下面的内容。
library(data.table)
set.seed(1554)
dt_example <- data.table(id = 1:50,
site = sample(x = c("A","B","C"),
size = 50,
replace = TRUE,
prob = c(0.4,0.4,0.2)),
group = sample(x = c("Eta","Mu","Omicron","Psi"),
size = 50,
replace = TRUE),
team = sample(x = 1:3,
size = 50,
replace = TRUE,
prob = c(0.2,0.3,0.5)))

setkey(x = dt_example,
group,
team)

> dt_example[,as.list(key(.SD)),by = site]
site V1 V2
1: B group team
2: A group team
3: C group team

setkey(x = dt_example,
site,
group,
team)

> dt_example[,as.list(key(.SD)),by = site]
Empty data.table (0 rows) of 1 col: site

我想了解的是为什么在第一个版本中 .SD 的 key 是一致的,而在第二个版本中, .SD根本没有 key 。我认为这与 by = 的事实有关。列不直接包含在 .SD 中,这是打破关键,但我想确认我的逻辑。

所以,我的问题是:为什么数据表的子集 .SD , 当包含父数据表的键的列之一用作 by 时没有键分组变量?

最佳答案

在这种情况下,因为它是按 site, group, team 排序的, 同时按 site 分组, key 可以保留给 group, team因为订单将被维持。最简单的答案是我们似乎错过了这个案例。您能否仅通过此帖子的链接提交问题?

作为解决方法,您可以使用 by参数在 unique data.tables 的方法来指定列。

正如大卫所指出的,使用 unique(.SD)每个组似乎都没有必要,但这可能是另一个 Q。

关于r - 在 R 的 data.table 中,data.table 的键如何保存到使用 .SD 引用的子集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709105/

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