如何在R中聚合忽略某些字段的某些行,而不是忽略其他字段?

时间:2013-07-08 14:52:04

标签: r aggregate

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时才得到回答。我想要的结果是:

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

我尝试用qB == 0删除这些行,但这会改变qA的平均值。有任何想法吗?提前谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

实际上很简单:

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