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)
}
これは問題なく、小さなデータフレームで動作を変異しようとしている例のデータフレーム
df <- data.frame(cust = sample(1:100, 1000, TRUE),
channel = sample(c("WEB", "POS"), 1000, TRUE))
を持って、それが何を取りません時間は全く。 0.34602秒
の
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
時間差はしかし、データフレームはかなり大きくなるとき、言う、> 1000000以上
cust
のために、私の基本的なif/else
FXはあまりかかり、多くはです。この機能を効率化してより迅速に実行するにはどうすればよいですか?
を応答していただきありがとうございます。これが 'dplyr'フレームワークでスピードアップできるかどうかについての考えはありますか? – Steven
@Steven申し訳ありませんが、私はdplyrの経験が豊富です。しかし、data.tableは一般的に高速です。 – Kristofersen