【问题标题】:Cross join in Data.table doesnt seem to retain column namesData.table 中的交叉连接似乎不保留列名
【发布时间】:2019-08-14 06:45:35
【问题描述】:

data.table 文档说明了这一点,请参阅?CJ

x = c(1,1,2)

y = c(4,6,4)

CJ(x, y) # 输出列自动命名为'x'和'y'

但是当我运行示例时,它似乎没有保留

x = c(1,1,2)
y = c(4,6,4)
CJ(x, y)
   V1 V2
1:  1  4
2:  1  4
3:  1  4
4:  1  4
5:  1  6
6:  1  6
7:  2  4
8:  2  4
9:  2  6

【问题讨论】:

    标签: r data.table cross-join


    【解决方案1】:

    帮助文件?CJ 的主体部分(即“详细信息”或“值”部分)未提及保留名称。但是,似乎提到名称作为注释保留在帮助文件的示例部分中(看起来这是您获得示例的地方)。

    CJ 函数中挖掘,这似乎完全在R中实现,接近尾声有一个块,

    if (getOption("datatable.CJ.names", FALSE))
        vnames = name_dots(...)$vnames
    

    运行 getOption("datatable.CJ.names", FALSE) 返回 FALSE,data.table 版本为 1.12.0。当我们使用

    将其设置为 TRUE 时
    options("datatable.CJ.names"=TRUE)
    

    然后是代码

    x = c(1,1,2)
    y = c(4,6,4)
    
    CJ(x, y)
    

    返回

       x y
    1: 1 4
    2: 1 4
    3: 1 4
    4: 1 4
    5: 1 6
    6: 1 6
    7: 2 4
    8: 2 4
    9: 2 6
    

    但是,您也可以直接提供名称(帮助文件中未提及)。

    CJ(uu=x, vv=y)
    

    返回

       uu vv
    1:  1  4
    2:  1  4
    3:  1  4
    4:  1  4
    5:  1  6
    6:  1  6
    7:  2  4
    8:  2  4
    9:  2  6
    

    请注意,这会覆盖上述选项。

    【讨论】:

    • 奇怪的是,这个问题似乎在某个时候得到了解决,不是吗?github.com/Rdatatable/data.table/commit/… 不管怎样,文档的问题可能应该被提出。
    • @Peter_Evan 这很有趣。该更改是在 1 月 19 日进行的,而 1.12.0 版似乎是在 1 月 13 日发布的。该更改在 1.12.1 的 News page 中作为第三项提到。
    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多