ich ein data.table X habe, dass ich eine VariableWie in Vektorsuche vermeiden data.table
X[, varC :=((VarA =="A" & !is.na(VarA))
| (VarA == "AB" & VarB =="B" & !is.na(VarA) & !is.na(VarB))
)
]
Dieser Code funktioniert basierend auf 2 Zeichenvariablen erstellen möchte, aber es ist sehr langsam, weil es Scannt Vektor auf 2 Char-Variablen. Beachten Sie, dass ich die Tabelle key Claims4 nicht mit VarA und VarB einstelle. Gibt es einen "richtigen" Weg, dies in data.table zu tun?
Update 1: Ich benutze nicht setkey für diese Transformation, weil ich bereits setkey (X, Year, ID) für andere Variablentransformationen verwenden. Wenn ich das tue, muss ich die Schlüssel nach dieser Umwandlung auf Year, ID zurücksetzen.
Update 2: Ich habe mit Matthew Ansatz meines Ansatz Benchmark, und seine viel schneller:
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
Die einzige kleine Sache ist setkey dann wieder neu setkey ist etwas weitschweifig :)
Warum setzen Sie keinen Schlüssel? –
Dort könnte auch etwas unnötige Codierung sein; Wenn z. B. VarA == "AB" WAHR ist, dann ist es auch immer WAHR, dass! is.na (VarA), richtig? –
Hallo Marc, die! Is.na ist Pflicht. Ansonsten, wenn VarA fehlt, dann wird die Bedingung VarA == "AB" NA anstatt 0 zurückgeben, wie ich möchte – AdamNYC