gpt4 book ai didi

r - 临时键入 data.table 以进行合并

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

我有一个带键的 data.table,x,我意识到我需要使用不同的多列键来合并它。

我想避免 (i) 设置和重置 x 的 key 以及 (ii) 使用不同的 key 跟踪 x 的副本。下面是一些示例数据和我当前的方法:

require(data.table)
options(datatable.verbose=TRUE)
set.seed(1)
n <- 10
m <- 2
samp <- function(n) sample(1:9,n,replace=T)
x <- data.table(A = samp(n),B = samp(n),C = samp(n),key="A")
y <- x[samp(m),list(B,C,D=samp(m))]

# this works:
x[,.SD,key="B,C"][y]
# B C A D
# 1: 7 6 6 5
# 2: 9 4 6 2

所以这种方法有效,但我得到了评论

...j is a named list. It's very inefficient...

命名列表是.SD。有没有更好或更标准的方法来做到这一点?

似乎在没有.SD的情况下使用keykeyby没有效果:

key(x[,,keyby="B,C"]) # A
key(x[,,key="B,C"]) # A

最佳答案

在版本 1.9.5 中,添加了 on 参数,此用法说明在 changelog 中:

data.tables can join now without having to set keys by using the new on argument. For example: DT1[DT2, on=c(x = "y")] would join column 'y' of DT2 with 'x' of DT1. DT1[DT2, on="y"] would join on column 'y' on both data.tables.

在这种情况下,由于 xy 中的合并列名称相同,x[y,on=c("B", "C")] 有效。


历史答案(1.8.11 版本左右):As of version 1.8.11 [.data.table 将有一个key 参数,相当于预先调用setkeyv。这不完全是这个问题要找的东西,但我没有看到不复制整个数据(糟糕的 imo)就可以实现这一目标的方法,所以我认为这是一个合理的妥协,但如果您有其他想法,请告诉我。

由 Matthew 编辑

专门为[.data.table 添加一个名为key 的参数是最近几天的新建议,我还没有回应。我们在过去讨论过辅助键,例如 set2key。辅助键不会复制数据。

我们会在列表之外讨论它,但我认为 [.data.table 中的 key 可能会更改名称或以不同的方式完成。互联网提醒:v1.8.11 正在开发中,不稳定且处于试验阶段。当它被发布到 CRAN 时,它就可以被依赖。

关于r - 临时键入 data.table 以进行合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990713/

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