ho un X data.table che vorrei creare una variabile sulla base di 2 variabili carattereCome evitare di ricerca vettore in data.table
X[, varC :=((VarA =="A" & !is.na(VarA))
| (VarA == "AB" & VarB =="B" & !is.na(VarA) & !is.na(VarB))
)
]
questo codice funziona, ma è molto lento, perché esegue la scansione vettoriale su 2 variabili char. Si noti che non setkey claims4 tabella di VarA e VarB. Esiste un modo "giusto" per farlo in data.table?
Update 1: Non utilizzo setkey per questa trasformazione perché utilizzo già setkey (X, Year, ID) per altre trasformazioni di variabili. Se lo faccio, ho bisogno di ripristinare le chiavi in Anno, ID dopo questa trasformazione.
Update 2: ho fatto riferimento il mio approccio con l'approccio di Matteo, e il suo è molto più veloce:
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
L'unica cosa minore è setkey poi ri-setkey è di nuovo un po 'prolissa :)
Perché non si imposta la chiave? –
Potrebbe anche esserci qualche codifica non necessaria; per esempio se VarA == "AB" è TRUE, allora sarà sempre anche VERO che! is.na (VarA), giusto? –
Ciao Marc, il! Is.na è richiesto. Altrimenti, se Manca VarA, allora condizione VarA == "AB" restituirà NA invece di 0 come vorrei – AdamNYC