使用用户定义的函数在R中聚合数据
发布时间:2020-12-13 20:25:13 所属栏目:百科 来源:网络整理
导读:我使用聚合方法将数据分组到R中. Avg=aggregate(x$a,by=list(x$b,x$c),FUN= mean) 这给出了’a’的所有值的平均值’a’由数据框’x’的’b’和’c’分组. 现在,我不想
我使用聚合方法将数据分组到R中.
Avg=aggregate(x$a,by=list(x$b,x$c),FUN= mean) 这给出了’a’的所有值的平均值’a’由数据框’x’的’b’和’c’分组. 现在,我不想取’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 在上面的Aggregate函数之后它会给我 Group.1 Group.2 x G 3 18.85 但我想把平均值的最大5个’a’值 Group.1 Group.2 x G 3 22.40 我无法容纳我在Agrregate函数中使用的以下最大函数 index <- order(vector,decreasing = T)[1:5] vector(index) 可以请任何人对这怎么可能有所了解?
您可以订购数据,获取前5个条目(使用head),然后应用均值:
aggregate(x$a,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,FUN= function(z) myfunc(z,5)) # Group.1 Group.2 x #1 G 3 22.4 我实际上更喜欢使用聚合中的公式样式,看起来像这样(我也使用with()来直接引用列名,而不是每次都使用x $): with(x,aggregate(a ~ b + c,5))) # b c a #1 G 3 22.4 在该函数中,参数z基于b和c的组传递每个a-向量.那现在更有意义了吗?另请注意,此处不返回整数,而是返回数值(十进制,在本例中为22.4)值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |