Meine Frage bezieht sich auf die Erstellung einer Variablen, die von anderen Spalten innerhalb einer data.table abhängt, wenn keiner der Variablennamen im Voraus bekannt ist.data.table: Richtige Methode zum Erstellen einer bedingten Variablen, wenn Spaltennamen nicht bekannt sind?
Unten ist ein Spielzeugbeispiel, wo ich 5 Reihen habe und die neue Variable sollte 1 sein, wenn die Bedingung A und 4 anders ist.
Der Code unten funktioniert, aber fühlt sich an, als ob ich das Paket missbrauche!
DT[,Col4:=ifelse(DT[[Col1]]=="A",
DT[[Col2]],
DT[[Col3]]),with=FALSE]
Update: Danke, ich habe einige schnelle Timing der folgenden Antworten. Einmal auf einer data.table mit 5.000.000 Zeilen und nur die relevanten Spalten und wieder nach 10 nicht relevanten Spalten hinzufügen, unten sind die Ergebnisse:
+-------------------------+---------------------+------------------+
| Method | Only relevant cols. | With extra cols. |
+-------------------------+---------------------+------------------+
| List method | 1.8 | 1.91 |
| Grothendieck - get/if | 26.79 | 30.04 |
| Grothendieck - get/join | 0.48 | 1.56 |
| Grothendieck - .SDCols | 0.38 | 0.79 |
| agstudy - Substitute | 2.03 | 1.9 |
+-------------------------+---------------------+------------------+
Looks wie .SDCols ist am besten für die Geschwindigkeit und mit Ersatz für leicht zu Code lesen.
In der ersten Antwort, sollte es 'Col4 sein: =' oder 'c (“ Col4 "): ='. – Arun
'data.table' ist im Allgemeinen nicht eingerichtet, um eine Zeichenvariable zu übernehmen, die auf eine Spalte verweist - aber ich denke,' get' ist der beste Ansatz, der funktioniert. –
@Arun, 'Col4: =' und 'c (" Col4 "): =' geben beide buchstäblich 'Col4' als den Spaltennamen, aber der gewünschte Spaltenname ist' Ans', nicht 'Col4'. –