gpt4 book ai didi

r - 使用用户定义的函数在 R 中聚合数据

转载 作者:行者123 更新时间:2023-12-04 14:58:15 24 4
gpt4 key购买 nike

我使用聚合方法对 R 中的数据进行了分组。

Avg=aggregate(x$a, by=list(x$b,x$c),FUN= mean)

这给了我按数据框“x”的“b”和“c”分组的“a”的所有值的平均值。

现在,我不想取 'a' 的所有值的平均值,而是取按 'b' 和 'c' 分组的 'a' 的 3 个最大值的平均值。

样本数据集
a    b    c
10 G 3
20 G 3
22 G 3
10 G 3
15 G 3
25 G 3
30 G 3

在上面的聚合函数之后,它会给我
Group.1    Group.2    x
G 3 18.85

但我只想取 'a' 的最大 5 个值作为平均值
Group.1    Group.2    x
G 3 22.40

我无法容纳我在 Agrregate 函数中使用的以下最大函数
index <- order(vector, decreasing = T)[1:5]
vector(index)

请任何人都可以说明这怎么可能?

最佳答案

您可以对数据进行排序,获取前 5 个条目(使用 head),然后应用平均值:

aggregate(x$a, by=list(x$b,x$c),FUN= function(x) mean(head(x[order(-x)], 5)))
# Group.1 Group.2 x
#1 G 3 22.4

如果你想用自定义函数来做到这一点,我会这样做:
myfunc <- function(vec, n){
mean(head(vec[order(-vec)], n))
}

aggregate(x$a, by=list(x$b,x$c),FUN= function(z) myfunc(z, 5))
# Group.1 Group.2 x
#1 G 3 22.4

我实际上更喜欢使用 aggregate 中的公式样式看起来像这样(我也使用 with() 可以直接引用列名,而无需每次都使用 x$):
with(x, aggregate(a ~ b + c, FUN= function(z) myfunc(z, 5)))
# b c a
#1 G 3 22.4

在这个函数中,参数 z每个都通过 a -基于 b 组的向量和 c .现在更有意义了吗?另请注意,它在此处不返回整数,而是返回数字(在本例中为十进制,22.4)值。

关于r - 使用用户定义的函数在 R 中聚合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431748/

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