2013-05-21 126 views
1

和頻數據幀我有一個data.frame,看起來像這樣:R,按名稱

 Name   freq   
1 species1  4    
2 species2  8    
3 species1  7    
4 species1  10    
5 species2  9    

我要總結的頻率爲每種名。 預期結果:

 Name    freq 
1 species1   21 
2 species2   17 
+0

可以使用基礎R功能'aggregate' ,'plyr'軟件包中的'ddply'函數或我最喜歡的'data.table'。 – Justin

回答

1

假設你連接你的data.frame,只是這樣做

tapply(freq, INDEX=list(Name),FUN=sum) 

,或者對於所謂的 「數據X」 的數據幀

tapply(dataX$freq, INDEX=list(dataX$Name),FUN=sum) 
2

爲了發展plyr替代方案:

ddply(data,~Name,summarise,freqsum=sum(freq)) 
2

這裏是一個使用data.table的解決方案。

> library(data.table) 
> DT <- data.table(X) 
> DT[, sum(freq), by=Name] 
     Name V1 
1: species1 21 
2: species2 17 

其中X是你原來的data.frame

如果你想標記新列,包裹在list

> DT[, list(fsum=sum(freq)), by=Name] 
     Name fsum 
1: species1 21 
2: species2 17