• R语言
  • 求助:R语言-如何对数据框进行分类计算

现在有一个数据框:

> SCORES<-read.csv("Scores.csv",head=T)

> SCORES

Name Sex Math Language

1 ACB F 85 92

2 ACC M 88 96

3 BCC F 95 76

4 CDD F 68 90

5 ABC M 74 85

如何对上面数据框分别对性别F和M同时求和、求平均运算?

<br />
female_math <- sum(SCORES[which(SCORES$Sex == 'F'),3])<br />
female_lang <- sum(SCORES[which(SCORES$Sex == 'F'),4])<br />
male_math <- sum(SCORES[which(SCORES$Sex == 'M'),3])<br />
male_lang <- sum(SCORES[which(SCORES$Sex == 'M'),4])<br />


mean也一样。这是比较直接的方法。
</p>

能不能用一个函数,一次性完成计算呢?

zhangbing4502431:你能不能介绍一下这程序包的ddply如何使用?

by(SCORES[,3:4],SCORES[,2],colMeans)
</p>

第6楼的只能求平均,有没有求和的?方差的?……

回复 第7楼 的 scottan:把最后的 colMeans 改成你自己要的 function.

<br />
y=aggregate(.~Sex, data=SCORES[,2:4], function(x) c(Sum=sum(x), Mean=mean(x),SD=sd(x)))<br />
y<br />
  Sex   Math.Sum  Math.Mean    Math.SD Language.Sum Language.Mean Language.SD<br />
1   F 248.000000  82.666667  13.650397   258.000000     86.000000    8.717798<br />
2   M 162.000000  81.000000   9.899495   181.000000     90.500000    7.778175<br />
</p>

9楼的方法很好!谢谢你了!谢谢以上各位朋友的热心帮助!

如果我要统计“M”和“F”各有多少人,又怎么做呢?

回复 第11楼 的 scottan:summary(as.factor(SCORES$Sex))

谢谢Robert_Hoo,你的回答对我很有帮助,祝你周末愉快!