gpt4 book ai didi

r - 如何避免在 data.table 中进行向量搜索

转载 作者:行者123 更新时间:2023-12-04 15:01:29 25 4
gpt4 key购买 nike

我有一个 data.table X,我想基于 2 个字符变量创建一个变量

   X[, varC :=((VarA =="A" & !is.na(VarA)) 
| (VarA == "AB" & VarB =="B" & !is.na(VarA) & !is.na(VarB))
)
]

此代码有效,但速度非常慢,因为它对 2 个字符变量进行矢量扫描。请注意,我没有通过 VarA 和 VarB setkey claim4 表。在 data.table 中是否有“正确”的方法来做到这一点?

更新 1:我不使用 setkey 进行此转换,因为我已经将 setkey(X, Year, ID) 用于其他变量转换。如果我这样做,我需要在此转换后将 key 重置回 Year, ID。

更新 2:我确实用 Matthew 的方法对我的方法进行了基准测试,他的方法要快得多:
          test replications elapsed relative user.self sys.self user.child sys.child
2 Matthew 100 3.377 1.000 2.596 0.605 0 0
1 vectorSearch 100 200.437 59.354 76.628 40.260 0 0

唯一的小事是 setkey 然后再次重新 setkey 有点冗长:)

最佳答案

怎么样 :

setkey(X,VarA,VarB)
X[,varC:=FALSE]
X["A",varC:=TRUE]
X[J("A","AB"),varC:=TRUE]

或者,在一行中(以保存变量 X 的重复并演示):
X[,varC:=FALSE]["A",varC:=TRUE][J("A","AB"),varC:=TRUE]

为了避免根据要求设置 key ,手动辅助 key 如何:
S = setkey(X[,list(VarA,VarB,i=seq_len(.N))],VarA,VarB)
X[,varC:=FALSE]
X[S["A",i][[2]],varC:=TRUE]
X[S[J("A","AB"),i][[3]],varC:=TRUE]

现在很明显,这种语法很丑陋。所以 FR#1007 Build in secondary keys是将其构建到语法中;例如。,
set2key(X,varA,varB)
X[...some way to specify which key to join to..., varC:=TRUE]

与此同时,如上图所示,手动操作也是可能的。

关于r - 如何避免在 data.table 中进行向量搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657039/

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