【问题标题】:mean, max, min functions with ddplyddply 的均值、最大值、最小值函数
【发布时间】:2013-09-13 09:42:01
【问题描述】:

我有一个包含半小时值的大型气象数据集。我正在使用 ddply 函数来创建每日值(平均值、总和等),但是我在获取最小值和最大值时遇到了问题!对于某些值,例如气温我想提取每日平均值、最小值和最大值,但是返回的数据框给了我与平均值相同的最小值和最大值。有人可以看看我写的命令,看看他们是否发现任何错误?

HFTda <- ddply (HFT, .(Year, DOY),summarise, 
                Temp = mean (Temp, na.rm = F), 
                Tmax = max (Temp, na.rm = F),
                Tmin = min (Temp, na.rm = F),
                RHmax = max (RH.x, na.rm = F), 
                RHmin = min (RH.x, na.rm = F),
                VPD = mean (VPD.x, na.rm = F), 
                Grad = mean (GradInc2, na.rm = F), 
                Gex = mean (Gex, na.rm = F),
                Prec = sum (Prec, na.rm = F), 
                H = mean (HFill, na.rm = F), 
                LE = mean (LEFill, na.rm = F), 
                NEE = mean (co2_fluxFill, na.rm = F), 
                ET = mean (h2o_fluxFill, na.rm = F), 
                SWout = mean (YB5214h, na.rm = F))

【问题讨论】:

  • 注:每日拆分基于年和日数(DOY)
  • 请给出一些可重现的例子。我的建议是将您的调用汇总到一个匿名函数中,并在其中放置一个浏览器调用,以便您可以检查所有值
  • 我第二个@KarlForner 将dput( head( HFT ) ) 的输出添加到代码块中的问题中。

标签: r plyr


【解决方案1】:

尽管缺乏可重复的示例,但我认为我有一个想法;我认为问题在于您在尝试获取其最小值和最大值之前采用了 temp 的平均值(并在本地覆盖该值):

预赛:

d <- data.frame(day=rep(1:2,each=4),Temp=1:8)
library(plyr)

精简示例:

ddply(d, .(day), summarise,
   Temp = mean (Temp),
   minTemp = min(Temp))
 ##   day Temp minTemp
 ## 1   1  2.5     2.5
 ## 2   2  6.5     6.5

最简单的解决方法就是改变顺序:

 ddply(d, .(day), summarise,
   minTemp = min(Temp),
   Temp = mean (Temp))
##   day minTemp Temp
## 1   1       1  2.5
## 2   2       5  6.5

或者(也许更好)你可以将你的平均变量称为meanTemp ...

http://r4stats.com/2013/01/22/comparing-tranformation-styles/ 是相关的(显然summarise 进行mutate 式评估)

【讨论】:

  • 完美!是的,问题是因为平均值的名称与原始数据的名称相同,这是首先计算的,因为 ddply 函数按照给定的顺序进行计算!是的,最简单的解决方案是将名称更改为“aveTemp”或“meanTemp”
  • 附言。抱歉缺少示例数据框。我只是确定问题出在代码本身,尽管使用 ddply 的人会从代码中识别出问题。无论如何,下次我有问题时,我一定会提出一个相关数据框的简化示例。感谢 Ben 的解决方案,感谢其他人的 cmets!
猜你喜欢
  • 2018-07-07
  • 2021-04-14
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多