2013-07-08 54 views
0
city qA qB qC 
0001 1 1 5 
0001 3 1 3 
0002 2 0 NA 
0002 2 0 NA 
0002 4 1 1 
0002 4 1 3 

我想按城市汇总此列表,每个字段的平均值。正如你所看到的,问题C仅回答如果问题B为1。我想要什么,结果是:如何在R中忽略某些行的某些行而不忽略其他行?

city qA qB qC 
0001 2 1 4 
0002 3 0.5 2 

我试图消除与QB == 0线,但这将改变QA平均。有任何想法吗?提前致谢!

回答

1

这是很简单的实际上是:

aggregate(xx[-1], by=list(xx$city), FUN=mean, na.rm=TRUE) 
+0

谢谢!两个都很好! – Rodrigo

+0

好消息! :) – asb

+0

@洪:感谢编辑。 – asb

3

使用aggregate,的论据na.action=na.passna.rm=TRUE。前者告诉aggregate不要删除存在NAs的行;后者是聚合函数应该采取的行动。

aggregate(cbind(qA, qB, qC) ~ city, df, mean, na.action=na.pass, na.rm=TRUE) 
+0

谢谢!两个都很好! – Rodrigo

+0

如果na.rm = TRUE只从平均值计算中删除值(不是列表中的整行),那么na.action = na.pass不会变得不必要? – Rodrigo