gpt4 book ai didi

r - data.table 合并和 X[Y] 连接后键的不同行为

转载 作者:行者123 更新时间:2023-12-05 00:20:10 26 4
gpt4 key购买 nike

考虑 data.table

library(data.table)   ## v1.9.7 (dev version)
# rm(list=ls())
dt1 <- data.table(id=c(1,2,3),
val=c(3,2,1))

dt2 <- data.table(id=c(1,2,3),
val2=c(100,200,300))

在这里,没有为表分配键
tables()
# NAME NROW NCOL MB COLS KEY
#[1,] dt1 3 2 1 id,val
#[2,] dt2 3 2 1 id,val2
#Total: 2MB

当使用两个不同的 data.table加入操作
dt_merge <- merge(dt1, dt2, by=c("id"))
dt_bracket <- dt1[ dt2, on=c("id")]

我们看到 merge函数已分配一个键,但 X[Y]没有
#     NAME       NROW NCOL MB COLS        KEY
#[1,] dt_bracket 3 3 1 id,val,val2
#[2,] dt_merge 3 3 1 id,val,val2 id
#[3,] dt1 3 2 1 id,val
#[4,] dt2 3 2 1 id,val2

如果我们再使用两个 data.tables在连接列具有不同名称的情况下,它将键分配为 X 连接列:
#  rm(list=ls())
dt1 <- data.table(id=c(1,2,3),
val=c(3,2,1))

dt2 <- data.table(id2=c(1,2,3),
val2=c(100,200,300))


dt_merge <- merge(dt1, dt2, by.x=c("id"), by.y=c("id2"))
dt_bracket <- dt1[ dt2, on=c(id = "id2")]
tables()
# NAME NROW NCOL MB COLS KEY
#[1,] dt_bracket 3 3 1 id,val,val2
#[2,] dt_merge 3 3 1 id,val,val2 id
#[3,] dt1 3 2 1 id,val
#[4,] dt2 3 2 1 id2,val2

我在 PDF FAQ - 1.12 中找不到解释或 the CRAN documentation这解释了为什么在 merge 之后分配一个键.

因为这让我知道了几个 unique()打电话,我想知道这是否是预期的行为?

更新 - 解决方案

正如 Frank 指出的,答案在于 sort争论
dt_merge_sort <- merge(dt1, dt2, by=c("id"))
dt_merge_notSort <- merge(dt1, dt2, by=c("id"), sort=FALSE)

tables()

# NAME NROW NCOL MB COLS KEY
#[1,] dt1 3 2 1 id,val
#[2,] dt2 3 2 1 id,val2
#[3,] dt_merge_notSort 3 3 1 id,val,val2
#[4,] dt_merge_sort 3 3 1 id,val,val2 id

最佳答案

它看起来像 ?merge.data.table记录此为其 sort争论:

If TRUE (default), the merged data.table is sorted by setting the key to the by / by.x columns. If FALSE, the result is not sorted.

关于r - data.table 合并和 X[Y] 连接后键的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075280/

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