【问题标题】:Group_by returns just one row while aggregate returns the expected outcomeGroup_by 仅返回一行,而聚合返回预期结果
【发布时间】:2019-08-19 09:50:56
【问题描述】:

我目前被困在一些 EddyData 的后处理中。按照一个例子 (https://github.com/bgctw/REddyProc/blob/master/vignettes/aggUncertainty.md) 我想出了一个意想不到的结果 group_by 这是可重现的,但我不明白为什么。

Group_by 只返回一行,而聚合给出预期结果。

这是一个最小的例子:

library(tidyverse)

#create example data frame
date.time <- seq(from=as.POSIXct("2015-01-01 00:30:00"), to=as.POSIXct("2015-01-03 00:30:00"),by="30 mins")
nee <- runif(length(date.time),-200,200)
df <- data.frame(date.time, nee)

#calculate day of the year
df <- df %>% mutate(
  date.time = df$date.time
  , DoY = as.POSIXlt(date.time - 15*60)$yday # midnight belongs to the previous
)

#trying to summarise nee for each day
aggDay <- df %>% group_by(DoY) %>% summarise(nee=sum(nee))
aggDay
       nee
1 322.1195

aggDay 只返回一行,而 aggregate 在这种情况下可以工作

aggregate(df$nee, by=list(df$DoY), sum)
  Group.1          x
1       0  -25.15698
2       1  448.13960
3       2 -100.86310

不幸的是,原始代码涉及一些进一步的计算,这就是我想留在group_by 的原因。

#original code, not reproducible here
aggDay <- df %>% group_by(DoY) %>% 
  summarise(
    DateTime = first(DateTime)
    , nRec = sum( NEE_uStar_fqc == 0, na.rm = TRUE)
    , nEff = computeEffectiveNumObs(
      resid, effAcf = !!autoCorr, na.rm = TRUE)
    , NEE = mean(NEE_uStar_f, na.rm = TRUE)
    , sdNEE = if (nEff <= 1) NA_real_ else sqrt(
      mean(NEE_uStar_fsd^2, na.rm = TRUE) / (nEff - 1)) 
    , sdNEEuncorr = if (nRec == 0) NA_real_ else sqrt(
      mean(NEE_uStar_fsd^2, na.rm = TRUE) / (nRec - 1))
  )

【问题讨论】:

    标签: group-by dplyr posixct


    【解决方案1】:

    我重新启动了 RStudio,现在它可以工作了。不要问我。一定是另一个加载的包有问题。

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2021-12-06
      • 2021-07-25
      • 2011-08-09
      • 2010-09-22
      • 2021-05-17
      相关资源
      最近更新 更多