Closed. This question needs to be more focused 。它目前不接受答案。












想改善这个问题吗?更新问题,使其仅通过 editing this post 关注一个问题。

6年前关闭。



Improve this question



Aaa <- data.frame(amount=c(1,2,1,2,1,1,2,2,1,1,1,2,2,2,1),
                  card=c("a","b","c","a","c","b","a","c","b","a","b","c","a","c","a"))

aggregate(x=Aaa$amount, by=list(Aaa$card), FUN=mean)

##   Group.1    x
## 1       a 1.50
## 2       b 1.25
## 3       c 1.60

tapply(Aaa$amount, Aaa$card, mean)

##    a    b    c
## 1.50 1.25 1.60

以上是示例代码。
aggregatetapply 似乎都非常方便并且执行相似的功能。

有人可以解释或举例说明它们的差异吗?

最佳答案

aggregate 旨在使用一个函数处理多列,并为每个类别返回一个包含一行的数据帧,而 tapply 旨在处理单个向量,结果以矩阵或数组形式返回。仅使用两列矩阵并不能真正证明任一函数的能力(或它们的显着差异)。 aggregate 也有一个公式方法,而 tapply 没有。

> Aaa <- data.frame(amount=c(1,2,1,2,1,1,2,2,1,1,1,2,2,2,1), cat=sample(letters[21:24], 15,rep=TRUE),
+                   card=c("a","b","c","a","c","b","a","c","b","a","b","c","a","c","a"))
> with( Aaa, tapply(amount, INDEX=list(cat,card), mean) )
    a   b   c
u 1.5 1.5  NA
v 2.0 1.0 2.0
w 1.0  NA 1.5
x 1.5  NA 1.5

>  aggregate(amount~cat+card, data=Aaa, FUN= mean)
  cat card amount
1   u    a    1.5
2   v    a    2.0
3   w    a    1.0
4   x    a    1.5
5   u    b    1.5
6   v    b    1.0
7   v    c    2.0
8   w    c    1.5
9   x    c    1.5
xtabs 函数还提供了一个 R “表”,并且它有一个公式接口(interface)。 R 表是通常具有整数值的矩阵,因为它们被设计为“列联表”,其中包含边缘类别交叉分类中的项目计数。

10-08 12:17