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

前端之家收集整理的这篇文章主要介绍了使用用户定义的函数在R中聚合数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用聚合方法将数据分组到R中.
  1. Avg=aggregate(x$a,by=list(x$b,x$c),FUN= mean)@H_403_2@
  2. 这给出了’a’的所有值的平均值’a’由数据框’x’的’b’和’c’分组.

  3. 现在,我不想取’a’的所有值的平均值,而是取“b”和“c”分组的’a’的3个最大值的平均值.

  4. 样本数据集

  5. a    b    c
  6. 10   G    3 
  7. 20   G    3 
  8. 22   G    3
  9. 10   G    3 
  10. 15   G    3
  11. 25   G    3
  12. 30   G    3@H_403_2@ 
  13.  

    在上面的Aggregate函数之后它会给我

  14.   
  15.  
    Group.1    Group.2    x
  16.   G          3       18.85@H_403_2@ 
  17.  

    但我想把平均值的最大5个’a’值

  18.   
  19.  
    Group.1    Group.2    x
  20.   G          3       22.40@H_403_2@ 
  21.  

    我无法容纳我在Agrregate函数中使用的以下最大函数

  22.   
  23.  
    index <- order(vector,decreasing = T)[1:5]
  24. vector(index)@H_403_2@ 
  25.  

    可以请任何人对这怎么可能有所了解?

您可以订购数据,获取前5个条目(使用head),然后应用均值:
  1. aggregate(x$a,FUN= function(x) mean(head(x[order(-x)],5)))
  2. # Group.1 Group.2 x
  3. #1 G 3 22.4@H_403_2@
  4. 如果您想使用自定义函数执行此操作,我会这样做:

  5. myfunc <- function(vec,n){
  6.   mean(head(vec[order(-vec)],n))
  7. }
  8. aggregate(x$a,FUN= function(z) myfunc(z,5))
  9. #  Group.1 Group.2    x
  10. #1       G       3 22.4@H_403_2@ 
  11.  

    我实际上更喜欢使用聚合中的公式样式,看起来像这样(我也使用with()来直接引用列名,而不是每次都使用x $):

  12.   
  13.  
    with(x,aggregate(a ~ b + c,5)))
  14. #  b c    a
  15. #1 G 3 22.4@H_403_2@ 
  16.  

    在该函数中,参数z基于bc的组传递每个a-向量.那现在更有意义了吗?另请注意,此处不返回整数,而是返回数值(十进制,在本例中为22.4)值.

猜你在找的设计模式相关文章