Tay*_*r F 3 optimization r dplyr
我希望为数字小标题中的每一行生成均值和方差值。使用我现有的代码(我认为这是一个非常适合 dplyr 的解决方案),需要几个小时才能完成 50,000 行约 35 列的工作。
有没有办法仅使用 dplyr 来加速此操作?我知道 apply 和 purrr 是选项,但我最好奇的是,在执行这样的大量计算时,我是否忽略了 dplyr 的某些内容。
可重现的例子:
library(tidyverse)
library(vroom)
gen_tbl(50000, cols = 40,
col_types = paste0(rep("d", 40), collapse = "")) %>%
rowwise() %>%
mutate(mean = mean(c_across()),
var = var(c_across()))
Run Code Online (Sandbox Code Playgroud)
我的怀疑在于,rowwise()但我很感兴趣是否有一种更细致的方法可以用 dplyr 解决这个问题,或者这不是 dplyr 擅长的问题。
行式方法的处理时间似乎呈二次爆炸:
旋转时间更长会使计算速度加快约 300 倍。对于 50k 行,下面的代码花费了 1.2 秒,而该rowwise方法花费了 372 秒。
df %>%
mutate(row = row_number()) %>%
tidyr::pivot_longer(-row) %>%
group_by(row) %>%
summarize(mean = mean(value),
var = var(value)) %>%
bind_cols(df, .)
Run Code Online (Sandbox Code Playgroud)