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的平均值。有任何想法吗?提前谢谢!
答案 0 :(得分:3)
使用aggregate
, 参数na.action=na.pass
和na.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)