使用聚合在一个调用中对几个变量应用几个函数
我有以下数据框
x <- read.table(text = " id1 id2 val1 val2 1 a x 1 9 2 a x 2 4 3 a y 3 5 4 a y 4 9 5 b x 1 7 6 b y 4 4 7 b x 3 9 8 b y 2 8",header = TRUE) 我想计算由id1和id2分组的val1和val2的平均值,同时计算每个id1-id2组合的行数。我可以单独执行每个计算: # calculate mean aggregate(. ~ id1 + id2,data = x,FUN = mean) # count rows aggregate(. ~ id1 + id2,FUN = length) 为了做一次电话中的两个计算,我试过 do.call("rbind",aggregate(. ~ id1 + id2,FUN = function(x) data.frame(m = mean(x),n = length(x)))) 但是,我得到一个乱码输出和警告: # m n # id1 1 2 # id2 1 1 # 1.5 2 # 2 2 # 3.5 2 # 3 2 # 6.5 2 # 8 2 # 7 2 # 6 2 # Warning message: # In rbind(id1 = c(1L,2L,1L,2L),id2 = c(1L,val1 = list( : # number of columns of result is not a multiple of vector length (arg 1) 我可以使用plyr包,但我的数据集是相当大,plyr是非常慢(几乎不可用)当数据集的大小增长。 如何使用聚合在一个调用中执行几个计算?
你可以一步一步做到这一切,并得到适当的标签:
> aggregate(. ~ id1+id2,FUN = function(x) c(mn = mean(x),n = length(x) ) ) # id1 id2 val1.mn val1.n val2.mn val2.n # 1 a x 1.5 2.0 6.5 2.0 # 2 b x 2.0 2.0 8.0 2.0 # 3 a y 3.5 2.0 7.0 2.0 # 4 b y 3.0 2.0 6.0 2.0 这是LHS上多个变量的语法: aggregate(cbind(val1,val2) ~ id1 + id2,n = length(x) ) ) 更新:(不是真的,更多的评论和一个错误) 因为有一个错误? (2013-08-08)在聚合中,您不能在data.frame类的对象中保存aggregate(data.frame)的输出。 object <- as.data.frame(as.list(aggregate(data.frame))) 作者回复“更新”上面“ 我发现没有这样的错误(如下所述@ user2659402)。我在MacOS 10.7.5上运行最新版本的R。我发现上面的代码完全不必要,因为聚合返回的对象类是“data.frame”。如果编辑在基本R函数中声明了错误,那么它们应该伴随有足够的数据文档,以及“正确结果”真正意味着与R版本和操作系统观察到的行为。 10/27/2014:我还没有发现这样的行为。我目前在Mac上运行R 3.1.1在Yosemite下,我测试了(再次)与Mac GUI和RStudio版本0.98.1081环境。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |