首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有cbind的聚合函数

具有cbind的聚合函数
EN

Stack Overflow用户
提问于 2012-11-29 19:18:25
回答 1查看 8.2K关注 0票数 1

我正在尝试将aggregate函数与cbind一起使用,但我肯定遗漏了一些东西。

我在Using Aggregate for Multiple Aggregations中看到,我可以简单地定义我想要修正的列以及我想要添加的列,但是我无法得到预期的结果。

我有:

代码语言:javascript
复制
x <- data.frame(alfa = 1:9, beta = rep(1:3, 3))

  alfa beta
1    1    1
2    2    2
3    3    3
4    4    1
5    5    2
6    6    3
7    7    1
8    8    2
9    9    3

我想检索那些在beta列中聚合的条目的平均值。为此,我试过:

代码语言:javascript
复制
aggregate(cbind(alfa) ~ beta, data = x, FUN = function(x) c(gama = mean(x)) )

这给了我:

代码语言:javascript
复制
  beta alfa
1    1    4
2    2    5
3    3    6

结果不应该是这样的:

代码语言:javascript
复制
  alfa beta gama
1    1    1    4
2    2    2    5
3    3    3    6

如何强制添加gama栏?另外,有人能澄清cbind()函数的基础吗?我一直在努力去理解它。致以问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-29 19:32:59

聚合接受~左侧的所有元素,并在这些值上使用给定的函数,同时根据右侧的值对它们进行分组。因此,你的命令

代码语言:javascript
复制
aggregate(alfa ~ beta, data=x, mean)

将返回按alfa分组的平均值。(正如您提到的SQL -这与SQL-子句SELECT beta, avg(alfa) FROM x GROUP BY beta的情况相同)

如果您想输出遇到的第一个值,这基本上是您想要做的另一个聚合,因此您的聚合函数必须返回两个值:

代码语言:javascript
复制
aggregate(alfa ~ beta, data=x, function(x) c(alfa=x[1], gamma=mean(x)))

(同样在SQL:SELECT beta, min(alfa), avg(alfa) FROM x GROUP BY beta中)

你问了关于cbind的事。只要你在左手边只有一个论点,这一点都不重要。但是,假设您有以下情况:

代码语言:javascript
复制
x <- data.frame(alfa = 1:9, beta = rep(1:3, 3), gamma = rnorm(9))

想要计算,比方说,alfagamma列的平均值,您可以这样做:

代码语言:javascript
复制
aggregate(cbind(alfa, gamma) ~ beta, data=x, function(x) mean(x))

这样,您只需告诉聚合函数在给定函数中使用抛出alfagamma

有关更多和详尽的示例,请参见?aggregate

编辑

您必须小心,不要混淆cbind的不同含义。使用一个单独的函数,它将两个长度相同的向量(或data.frames)连接到一个矩阵(或data.frame)上,并将两个输入作为不同的列:

代码语言:javascript
复制
> cbind(1:3, 7:9)
     [,1] [,2]
[1,]    1    7
[2,]    2    8
[3,]    3    9

在聚合cbind的公式表示法中使用,可以做一些相关但又不同的事情。cbind(column1, column2)只是告诉聚合在两行上分别使用给定的函数。因此,就像

代码语言:javascript
复制
aggregate(cbind(alfa, gamma) ~ beta, data=x, function(x) mean(x[,1]*x[,2]))

都不管用。相反,函数将被调用两次--一次用alfa的值,然后用beta的值。

希望能澄清你的理解。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13633063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档