【问题标题】:Find value relative to mean for particular Day of Year in R在 R 中查找特定年份的相对于平均值的值
【发布时间】:2015-06-20 14:48:10
【问题描述】:

我正在使用 R 中的一些气象数据,从概念上讲,我试图找出某一天高于/低于平均水平的程度。为此,我想按一年中的哪一天分开,找到所有 DOY 的平均值(例如 1 月 1 日的平均温度是多少?),然后比较每个日期(例如 2014 年 1 月 1 日异常温暖,多少? )

我可以使用聚合找到一年中每一天的“平均”表:

head(data)
          x       date
1  5.072241 1970-01-01
2  6.517069 1970-01-02
3  4.413654 1970-01-03
4 11.129351 1970-01-04
5  9.331630 1970-01-05

library(lubridate)
temp = aggregate(data$x, list(yday(data$date)), mean)

但是我不知道如何使用聚合表与我的原始 data.frame 进行比较,以查看 1970 年 1 月 1 日的 x 与 1 月 1 日的平均 x 之间的关系。

【问题讨论】:

    标签: r aggregate normalize lubridate


    【解决方案1】:

    我们可以用sub('Monthday')删除'year'部分。如果需要创建按“月”分组的均值变量,请使用 ave

    data$Monthday <- sub('\\d+-', '', data$date)
    data$Mean <- with(data, ave(x, Monthday))
    

    然后,我们可以与'x'变量进行比较,例如

    data$rel_temp <- with(data, x/Mean)
    

    【讨论】:

      【解决方案2】:

      你也应该使用dplyr

      library(dplyr); library(lubridate)
      
      data %>% mutate(year_day = paste0(month(date), "_",mday(date))) %>% 
        group_by(year_day) %>% mutate(relev_temp = x/mean(x)) %>% ungroup
      

      逻辑如下: 创建一个新变量year_day,它就是每个日期的月份和日期mutate(year_day =...

      然后将x 的温度除以year_daygroup_by(year_day) %&gt;% mutate(relev_temp = x/mean(x)) 的平均温度

      【讨论】:

      • 很好,谢谢。我会努力寻找解决办法
      • @akrun 我查看了您的解决方案并删除了年份。
      【解决方案3】:

      感谢您的反馈。 @akrun 的回答对我很有效。

      作为替代方案,我也一起破解了这个,它产生了与@akrun 的答案相同的输出(并且对于 40 年的日常数据慢了 1/10 秒):

          averages = aggregate(x, list(DOY = yday(date)), mean)
          temp = merge(data.frame(x,date, DOY = yday(date)), averages, by = 'DOY')  
          head(temp[order(temp$date),])
          DOY   x.x       date       x.y
      1     1 -12.0 1970-01-01 -8.306667
      70    2 -14.2 1970-01-02 -8.695556
      113   3 -16.7 1970-01-03 -8.060000
      157   4 -13.6 1970-01-04 -8.233333
      200   5 -19.2 1970-01-05 -8.633333
      243   6 -15.0 1970-01-06 -8.922222
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2018-08-14
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 2021-02-01
        相关资源
        最近更新 更多