2013-05-21 83 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