我有一个 data.table X 我想创建一个基于 2 个字符变量的变量
X[, varC :=((VarA =="A" & !is.na(VarA))
| (VarA == "AB" & VarB =="B" & !is.na(VarA) & !is.na(VarB))
)
]
此代码有效,但速度很慢,因为它对 2 个字符变量进行矢量扫描。请注意,我没有按 VarA 和 VarB 设置密钥 claim4 表。在 data.table 中是否有“正确”的方法来执行此操作?
更新 1:我不使用 setkey 进行此转换,因为我已经使用 setkey(X, Year, ID) 进行其他变量转换。如果我这样做了,我需要在此转换后将键重置回 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 然后再次 re-setkey 有点冗长:)