2 つの文字変数に基づいて変数を作成したい data.table X があります。
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(X, Year, ID) を使用しているため、この変換には setkey を使用しません。その場合、この変換後にキーを年、ID にリセットする必要があります。
更新 2: 私はマシューのアプローチで私のアプローチをベンチマークしましたが、彼ははるかに高速です:
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 はやや冗長です:)