【问题标题】:Grouped means in collapse package折叠包中的分组均值
【发布时间】:2022-08-20 06:09:52
【问题描述】:

我正在尝试使用collapse package 计算分组平均值。下面是我想要实现的一个例子。

library(data.table)
library(collapse)

data_1 <- as.data.table(airquality)
var_means <- c(
  \"Ozone\",
  \"Solar.R\",
  \"Wind\"
)
data_1[,paste0(var_means,\"_mean\") := lapply(.SD,mean,na.rm = TRUE),by = .(Month)]

标签: r collapse


【解决方案1】:

至少有两种方法。使用 dplyr 风格的语法:

library(collapse)

var_means <- c(
  "Ozone",
  "Solar.R",
  "Wind"
)

airquality |>
  fgroup_by(Month) |>
  fmutate(across(var_means, fmean, .names = TRUE)) |>
  fungroup()

或使用ftransform()

ftransform(airquality,
           fmean(
             list(
               Ozone_mean = Ozone,
               Solar.R_mean = Solar.R,
               Wind_mean = Wind
             ),
             g = Month,
             TRA = 1
           ))   

或者,如果您想传递列的字符向量,则需要以下内容:

ftransform(airquality, 
           fmean(
             do.call(list, lapply(setNames(var_means, paste0(var_means, "_mean")), as.name)),
             g = Month,
             TRA = 1
           ))

【讨论】:

  • 你能用字符向量详细说明最后一个吗,用 setNames 和 str2lang 看起来有点神秘
【解决方案2】:

里奇给了你一个很好的答案。我要补充一点,您可以将列表中的函数传递给 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 应用于帧的整个子集,因此我们只需要分组一次。

您拥有的最后一个混合选项是fcomputevadd_vars&lt;-ftransform&lt;-,后者更智能(即,如果再次执行它将替换列)但前者更快。

add_vars(airquality) <- airquality |> 
    fcomputev(var_means, fmean, Month, TRA = 1, apply = FALSE) |> 
    add_stub("_mean", pre = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2013-03-10
    • 1970-01-01
    • 2023-04-10
    • 2020-04-20
    相关资源
    最近更新 更多