2014-09-22 21 views
1
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 

以上是一個示例代碼。R中的tapply和aggregate有什麼區別?

看來,aggregatetapply都非常方便,並執行類似的功能。

有人可以解釋或舉例說明他們的區別嗎?

+1

你剛纔給出的例子。檢查他們。如果將輸出保存在一個變量中,您可以查看「類」,「摘要」和結構(「str」)。 – John 2014-09-22 03:05:55

回答

10

aggregate被設計爲在具有一個函數的多列上工作,併爲aech類別返回一行數據幀,而tapply被設計爲在單個向量上工作,結果作爲矩陣或數組返回。只使用兩列矩陣並不能真正讓兩個函數的能力(或它們的顯着差異)被證明。 `聚合也有一個公式的方法,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「表」,它有一個公式接口。 R表是通常具有整數值的矩陣,因爲它們被設計爲「臨時表」,用於保存邊際類別的交叉分類中的項目數。