我有一个包含很多组的 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)