Celem jest utworzenie wskaźników dla zmiennej czynnik/łańcuch w ramce danych. Ta ramka danych ma> 2 mm wierszy, a R na windows, nie mam możliwości użycia plyr z .parallel = T. Więc biorę trasę "dziel i rządź" z plyr i reshape2.Generowanie wskaźników w dużych ramkach danych
Running stopienia i odlewanych zabraknie pamięci, a przy użyciu
ddply(idata.frame(items) , c("ID") , function(x){
( colSums(model.matrix(~ x$element - 1)) > 0 )
} , .progress="text")
lub
ddply(idata.frame(items) , c("ID") , function(x){
( elements %in% x$element )
} , .progress="text")
ma potrwać. Najszybszym podejściem jest wezwanie do zastosowania poniżej. Czy widzisz sposób na przyspieszenie tego? Instrukcja% in% działa szybciej niż wywołanie model.matrix. Dzięki.
set.seed(123)
dd <- data.frame(
id = sample(1:5, size=10 , replace=T) ,
prd = letters[sample(1:5, size=10 , replace=T)]
)
prds <- unique(dd$prd)
tapply(dd$prd , dd$id , function(x) prds %in% x)
Jestem zdezorientowany twoim przykładem. Dzielisz 'dd $ prd' przez' dd $ id', następnie pytasz, które wartości 'prds' są reprezentowane w każdym id - ale' prds' nie jest posortowane (!) Czy chcesz 'prds <- sort (unique (dd $ prd)) '(co miałoby dla mnie dużo więcej sensu ...)? –
Dopóki wskaźniki (logiczne) odpowiadające elementom dostępnym w programach PRDS mają tę samą kolejność identyfikatorów, nie ma znaczenia, w jaki sposób są sortowane. –
OK. Zobacz moje inne pytanie, w mojej odpowiedzi poniżej ... –