里奇给了你一个很好的答案。我要补充一点,您可以将列表中的函数传递给 fmutate:
airquality |>
fgroup_by(Month) |>
fmutate(across(var_means, list(mean = fmean), .names = TRUE)) |>
fungroup()
您还可以将ftransform 与复合管道和add_stub 函数一起使用:
library(magrittr)
airquality %>% ftransform(get_vars(., var_means) %>% fmean(Month, TRA = 1) %>%
add_stub("_mean", pre = FALSE))
如果您不需要重命名列,一个简单的方法也是使用settransformv
settransformv(airquality, var_means, fmean, Month, TRA = 1, apply = FALSE)
非常接近您对 data.table 所做的事情。 apply = FALSE 这里确保我们使用fmean.data.frame 应用于帧的整个子集,因此我们只需要分组一次。
您拥有的最后一个混合选项是fcomputev 与add_vars<- 或ftransform<-,后者更智能(即,如果再次执行它将替换列)但前者更快。
add_vars(airquality) <- airquality |>
fcomputev(var_means, fmean, Month, TRA = 1, apply = FALSE) |>
add_stub("_mean", pre = FALSE)