ddply列的平均值,不考虑0值

时间:2016-11-10 23:25:31

标签: r plyr mean

所以我有一个数据框,其中Dates和Values为列。 我找到了一个代码,用于计算具有相同Date的所有值的平均值。

MeanValues = ddply(df, .(Date), summarize, Values = mean(Values))

现在我的问题是它考虑了0个值,它们基本上是NA的值,是否可以轻松修改此代码,排除0或NA值?

我感谢您花时间帮助我,谢谢。

1 个答案:

答案 0 :(得分:1)

让我们创建一个示例数据:

df = structure(list(Date = structure(c(17115, 17116, 17115, 17115, 
17115, 17115, 17115, 17116, 17115, 17116), class = "Date"), Values = c(12, 
NA, 13, 15, 18, 14, 17, 11, 20, 19)), .Names = c("Date", "Values"
), row.names = c(NA, -10L), class = "data.frame")

只需以某种方式过滤掉零,例如:

> MeanValues = ddply(df, .(Date), summarize, Values = mean(Values[Values>0]))

但最好在较早阶段将NA替换为NA,然后在na.rm=TRUE调用中使用mean

> df$Values[df$Values==0]=NA

> MeanValues = ddply(df, .(Date), summarize, Values = mean(Values,na.rm=TRUE))
> MeanValues
        Date   Values
1 2016-11-10 15.57143
2 2016-11-11 15.00000
>