小编bla*_*252的帖子

加速 group_by 操作 dplyr

我有一个包含很多组的 tibble,我想对其进行分组操作(下面高度简化的变异)。

z <- tibble(k1 = rep(seq(1, 600000, 1), 5),
            category = sample.int(2, 3000000, replace = TRUE)) %>%
  arrange(k1, category)
t1 <- z %>% 
  group_by(k1) %>%
  mutate(x = if_else(category == 1 & lead(category) == 2, "pie", "monkey")) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)

这个操作非常慢,但如果我“手动”进行分组,该过程很难阅读,写起来更烦人,但速度要快得多(20倍)。

z %>%
  mutate(x = if_else(category == 1 & lead(category) == 2 & k1 == lead(k1), "pie", "monkey"),
         x = if_else(category == 1 & k1 != lead(k1), NA_character_, x)) 
Run Code Online (Sandbox Code Playgroud)

很明显,有一些方法可以通过密钥来加速这个过程。有一个更好的方法吗?我尝试使用 data.table,但它仍然比手动技术慢得多。

zDT <- z %>% data.table::as.data.table()
zDT[, x := if_else(category == …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

5
推荐指数
2
解决办法
632
查看次数

标签 统计

data.table ×1

dplyr ×1

r ×1