Sto cercando di utilizzare data.table per ricodificare una variabile in base a determinate condizioni. Il mio set di dati originale ha circa 30 milioni di record e dopo tutto la creazione di variabili attorno a 130 variabili. Ho usato i metodi suggeriti qui: conditional statements in data.table(M1) e anche qui data.table: Proper way to do create a conditional variable when column names are not known?(M2)Uso di istruzioni condizionali in r data.table
Il mio obiettivo è ottenere l'equivalente del codice qui sotto, ma qualcosa che è applicabile utilizzando data.table
samp$lf5 <- samp$loadfactor5
samp$lf5 <- with(samp, ifelse(loadfactor5 < 0, 0, lf5))
Ammetto che non capisco .SD e .SDCols molto bene, quindi potrei usarlo male. Il codice ed errori da (M1) e (M2) sono riportati di seguito e il set di dati campione è qui: http://goo.gl/Jp97Wn
(M1)
samp[,lf5 = if(loadfactor5 <0) 0 else loadfactor5]
messaggio di errore
Error in `[.data.table`(samp, , lf5 = if (loadfactor5 < 0) 0 else loadfactor5) :
unused argument (lf5 = if (loadfactor5 < 0) 0 else loadfactor5)
Quando si esegue questa operazione:
samp[,list(lf5 = if(loadfactor5 <0) 0 else loadfactor5)]
dà lf5 come una lista, ma non come parte della SAMP data.table e in realtà non applicare la condizione di lf5 ha ancora valori inferiori a 0.
(M2)
Col1 <- "loadfactor5"
Col2 <- "lf5"
setkeyv(samp,Col1)
samp[,(Col2) :=.SD,.SDCols = Col1][Col1<0,(Col2) := .SD, .SDcols = 0]
ottengo il seguente errore
Error in `[.data.table`(samp, , `:=`((Col2), .SD), .SDCols = Col1) :
unused argument (.SDCols = Col1)
Eventuali approfondimenti su come finire questo apprezzato. Il mio set di dati ha 30 milioni di record, quindi spero di usare data.table per ridurre davvero i tempi di esecuzione.
Grazie,
Krishnan
'samp [, lf5: = ifelse (loadfactor5 <0, 0, loadfactor5)]'; cerca '.SD' su SO per scoprire che cos'è/fa – eddi
Sono stato in grado di usare questo comando per ottenere il risultato desiderato. – Krishnan
@Krishnan, potresti rispondere tu stesso e accettarlo in modo che la Q rimanga risposta? Grazie. – Arun