现在有一个数据框:
> 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同时求和、求平均运算?
求助:R语言-如何对数据框进行分类计算
<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>
能不能用一个函数,一次性完成计算呢?
回复 第3楼 的 scottan:看看plyr程序包,ddply函数可以。
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,你的回答对我很有帮助,祝你周末愉快!