gpt4 book ai didi

r - 在 summary_rows GT 包中使用 weighted.mean

转载 作者:行者123 更新时间:2023-12-05 05:45:48 25 4
gpt4 key购买 nike

我一直在寻找在 GT 包中使用 weighted.mean 和 summary_rows 的解决方案。

summary_rows 函数只接受 foo(x) 形式的函数,因此不接受具有更多变量的函数,例如 weighted.mean(x,w)。

将 summary_rows 与组一起使用时,例如:

summary_rows(groups = T, columns = c, fns = list("average" = ~mean(.)),...)

它获取每个组的值向量,然后分别通过 mean() 函数运行它们。所选功能的列表。

我对此的解决方案非常麻烦。我编写了自己的自定义函数,它采用 summary_rows 提供的值向量,并使用 if 语句将其与预期向量进行比较。这一次仅适用于单个列,因此在自定义函数和 GT 表的代码中都需要大量代码。

weighted_mean_age <- function (x) {
if (all(x == some.data$age.column[some.data$group.column == "group name"])) {
weighted.mean(x, some.data$no.occurences[some.data$group.column == "group name"])
} else if (another vector) {
And so on for every group.
}
}

有没有人处理过同样的问题,但提出了不那么麻烦的解决方案?我是否遗漏了 GT 包中的某些内容?

感谢您的宝贵时间和想法。

最佳答案

首先,我需要澄清我用于此答案的假设:

您想要的是将类似weighted.mean(.,w) 的内容传递给此summary_rows() 函数。但是,由于您在问题中概述的 gt library 问题,这是不可能的。如果是这样的话,那么我相信我有一个解决方案:

在创建一些非常具体的 Python 脚本时,我做过一些类似的“黑客攻击”。它本质上是围绕映射我想使用某些特定容器使用的功能展开的。因此,我搜索了 R 语言源,如果 R 中也有类似的东西,显然它正在使用 factory functions并将它们存储在某个容器中。这是一个分步指南:

您首先需要为您的 weighted.mean 创建一个工厂函数:

my_mean <- function(w) { function(x) { weighted.mean(x,w) } }

然后您需要用您的新功能填充某种容器(我使用的是 list):

func_list <- list()
func_list[[some_weight]] <- my_mean(some_weight)
func_list[[different_w]] <- my_mean(different_w)
#etc...

完成后,您应该能够将其作为函数传递给 summary_rows 即:

 summary_rows(
groups = T,
columns = c,
fns = list("w_mean" = ~func_list[w](.)),
...)

请记住,您必须使用某种形式的映射函数或循环将 w 值放入自己中。

希望这就是您要找的东西,希望对您有所帮助!

关于r - 在 summary_rows GT 包中使用 weighted.mean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71289848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com