Ich habe ein Beispiel Datenrahmenmutiert() mit einer if/else Funktion
df <- data.frame(cust = sample(1:100, 1000, TRUE),
channel = sample(c("WEB", "POS"), 1000, TRUE))
, die ich versuche zu mutieren
get_channels <- function(data) {
d <- data
if(unique(d) %>% length() == 2){
d <- "Both"
} else {
if(unique(d) %>% length() < 2 && unique(d) == "WEB") {
d <- "Web"
} else {
d <- "POS"
}
}
return(d)
}
Dies ohne Problem funktioniert und auf kleinen Datenrahmen, ist es nicht braucht Zeit überhaupt.
start.time <- Sys.time()
df %>%
group_by(cust) %>%
mutate(chan = get_channels(channel)) %>%
group_by(cust) %>%
slice(1) %>%
group_by(chan) %>%
summarize(count = n()) %>%
mutate(perc = count/sum(count))
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
Zeitunterschied von 0,34602 Sekunden
Wenn jedoch die Datenrahmen ziemlich groß wird, sagen wir, in der Größenordnung von> 1 Million oder mehr cust
, meine Grund if/else
fx nimmt viel, viel länger.
Wie kann ich diese Funktion rationalisieren, damit sie schneller ausgeführt wird?
Vielen Dank für die Antwort. Irgendeine Idee, wenn das im 'dplyr' Rahmenwerk beschleunigt werden kann? – Steven
@Steven Sorry, ich habe nicht viel Erfahrung mit dplyr. data.table ist jedoch in der Regel schneller. – Kristofersen