Próbuję użyć data.table do przekodowania zmiennej na podstawie określonych warunków. Mój pierwotny zestaw danych zawiera około 30 milionów rekordów, a po wszystkim tworzenie zmiennych około 130 zmiennych. Użyłem metody proponowane tutaj: conditional statements in data.table(M1) i również tutaj data.table: Proper way to do create a conditional variable when column names are not known?(M2)Używanie instrukcji warunkowych w pliku data.table
Moim celem jest dostać równowartość poniższy kod, ale coś, co jest stosowane przy użyciu data.table
samp$lf5 <- samp$loadfactor5
samp$lf5 <- with(samp, ifelse(loadfactor5 < 0, 0, lf5))
Przyznam, że nie rozumiem. SD i .SDCols bardzo dobrze, więc mogę używać go źle. Kod i błędy z (M1) i (M2) są podane poniżej, a zbiór danych próbka jest tutaj: http://goo.gl/Jp97Wn
(M1)
samp[,lf5 = if(loadfactor5 <0) 0 else loadfactor5]
Komunikat o błędzie
Error in `[.data.table`(samp, , lf5 = if (loadfactor5 < 0) 0 else loadfactor5) :
unused argument (lf5 = if (loadfactor5 < 0) 0 else loadfactor5)
Kiedy to zrobię:
samp[,list(lf5 = if(loadfactor5 <0) 0 else loadfactor5)]
daje LF5 postaci listy, ale nie jako część samp data.table i tak naprawdę nie stosuje się warunku jako LF5 nadal ma wartości mniejsze niż 0.
(M2)
Col1 <- "loadfactor5"
Col2 <- "lf5"
setkeyv(samp,Col1)
samp[,(Col2) :=.SD,.SDCols = Col1][Col1<0,(Col2) := .SD, .SDcols = 0]
otrzymuję następujący błąd
Error in `[.data.table`(samp, , `:=`((Col2), .SD), .SDCols = Col1) :
unused argument (.SDCols = Col1)
Wszelkie spostrzeżenia na temat sposobu, aby zakończyć to doceniane. Mój zbiór danych zawiera 30M rekordów, więc mam nadzieję, że wykorzystam data.table, aby naprawdę skrócić czas działania.
Dzięki,
Krishnan
'samp [, lf5: = ifelse (loadfactor5 <0, 0, loadfactor5)]'; wyszukaj '.SD' na SO, aby dowiedzieć się, co to jest/robi – eddi
Udało mi się użyć tego polecenia, aby uzyskać pożądany wynik. – Krishnan
@Krishnan, czy mógłbyś odpowiedzieć sam i zaakceptować to tak, że odpowiedź Q pozostaje? Dzięki. – Arun