2016-11-10 64 views
1

所以我有一个数据框,日期和值作为列。 我找到了一个代码,用于计算所有具有相同日期的值的平均值。ddply列的平均值不考虑0值

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

现在我的问题是,它认为0值,它们基本上是NA值,有没有简单的方法来修改这个代码,以排除0或NA值?

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

回答

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])) 

但可能会更好在较早阶段,以取代0与NA,然后在mean调用中使用na.rm=TRUE

> 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 
> 
+0

非常感谢您的快速回复和伟大的答案,现在它按预期工作! :) – LeroxXx