gpt4 book ai didi

r - 关于data.table 1.9.2的新特征J()

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

我很高兴找到 data.table发布了新版本,并收到了一个关于 J() 的问题.来自 data.table NEWS 1.9.2 :

x[J(2), a], where a is the key column sees a in j, #2693 and FAQ 2.8. Also, x[J(2)] automatically names the columns from i using the key columns of x. In cases where the key columns of x and i are identical, i's columns can be referred to by using i.name; e.g., x[J(2), i.a]


关于 J()有几个问题在 S.O,还有 data.table 的介绍谈 J()的二分查找.但我对 J()的理解还是不是很清楚。
我所知道的是,如果我想选择 A 列中的“b”和 B 列中的“d”的行:
DT2 <- data.table(A = letters[1:5], B = letters[3:7], C = 1:5)
setkey(DT2, A, B)
DT2[J("b", "d")]
如果我想选择 A = "a"或 "c"的行,我会这样编码
DT2[A == "a" | A == "c"]
很像 data.frame 方式。 (小问题:如何使用更多 data.table 方式进行选择?)
所以据我所知,' J()仅用于上述情况。从 2 个不同的列中选择两个单个值。
希望我的理解是错误的。关于 J()的文档很少.我读了 How is J() function implemented in data.table? . J(.)被检测到并简单地替换为 list(.)似乎每个案例 list(.)可以代替 J(.)回到问题,这个新功能的目的是什么? x[J(2), a]如果能给出详细的解释,不胜感激!

最佳答案

.()J()function包装 i data.table 的论据简单地替换为 list()因为 [.data.tablei 的语言做了一些编程和 j优化内部工作方式的论据。它可以被认为是 list 的别名。
包含它们的原因是为了节省时间和精力(3 个键击!)
如果我想选择键值 'a''c'从我可以做的键的第一列开始

DT[.(c('a','c'))]
# or
DT[J(c('a','c'))]
# or
DT[list(c('a','c'))]
如果我想要 A='a' or 'c'B = 'd'那么我可以使用
DT[.(c('a','c'),'d')]
如果我想要 A = 'a' or 'c' and B = 'd' or 'e'那么我会使用 CJ (或 expand.grid )创建所有组合
DT[CJ(c('a','c'),c('d','e'))]
J的帮助, SJCJ写得相当好!另见小插图 Keys and fast binary search based subset .

关于r - 关于data.table 1.9.2的新特征J(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129741/

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