微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找到温度与正常温度之间的偏差-R 4.0.0

如何解决如何找到温度与正常温度之间的偏差-R 4.0.0

我一直在研究一个将在多个气候站通用的数据集,用于分析温度和降水。我遇到了设计“气候规范”的砖墙,我已经成功计算了每日平均温度TAVG,每月平均温度AVG_TAVG,并总结了PRCPSNow每月总计。

我处于停滞状态的是计算偏离正常值的时间,目前,1981-2010年的数据被认为是气候规范。

这是我的数据集当前的样子:

mso_light
    
    year month day  date       PRCP SNow  SNWD TMAX TMIN  TAVG
1   1948    1   1   1948-01-01    0    0   102   44 -122 -39.0
2   1948    1   2   1948-01-02    3    0    51   44    6  25.0
3   1948    1   3   1948-01-03    0    0    25   44  -39   2.5
4   1948    1   4   1948-01-04   38   64    76   33  -56 -11.5
5   1948    1   5   1948-01-05    0    0    76   -6  -83 -44.5
6   1948    1   6   1948-01-06  107    0    51   22  -61 -19.5
7   1948    1   7   1948-01-07  147    0    25   28  -17   5.5
8   1948    1   8   1948-01-08    8   13    25   39  -83 -22.0
9   1948    1   9   1948-01-09    0    0    25   -6 -117 -61.5
10  1948    1   10  1948-01-10    8   10    25  -11 -156 -83.5

所以我本来觉得我需要date来进行排序,如果以后不需要的话,我会删除它。

接下来,我想为DepnormT添加一列,该列的计算方法是:从1981年至2010年的每年1月1日至12月31日取TAVG的平均值,以得出正常的平均温度。那么DepnormT将是它自身与整个数据集的TAVG间的差。

我尝试了多种方法来实现此目的,这是两个版本:

mso_DeptT <- mso_light %>%
  group_by(month,day) %>%
  mean(mso_light$TAVG[1981:2010],na.rm = T) %>%
  ungroup()

这给了我以下错误

  no applicable method for 'ungroup' applied to an object of class "c('double','numeric')"
In addition: Warning message:
In mean.default(.,mso_light$TAVG[1981:2010],na.rm = T) :
  argument is not numeric or logical: returning NA

这是另一个版本:

##mso_DeptT <- filter(mso_light,year >= "1981",year <= "2010") %>%
##  group_by(day,month) %>%
##  mutate(daily_DeptT = mean(TAVG,na.rm = T)) %>%
##  ungroup()

mso_sum <- mso_light %>%
  group_by(month,year) %>% 
  summarize(AVG_TAVG=mean(TAVG,na.rm = TRUE),T_PRCP=sum(PRCP,na.rm=TRUE),T_SNow=sum(SNow,na.rm=TRUE)) %>% 
  ungroup()

## To find monthly normal precipitation and sNowfall - using dataset mso_sum

cli_Avg <- filter(mso_sum,year <= "2010") %>%
  group_by(month) %>%
  summarize(Mon_Precip = mean(T_PRCP,na.rm = T),Mon_SNow = mean(T_SNow,na.rm = T))

这给了我30年的平均水平,等于每天的平均水平TAVG。例如:

    year month day  date       PRCP SNow  SNWD TMAX TMIN  TAVG  DepnormT
1   1948    1   1   1948-01-01    0    0   102   44 -122 -39.0      -39.0
2   1948    1   2   1948-01-02    3    0    51   44    6  25.0       25.0
3   1948    1   3   1948-01-03    0    0    25   44  -39   2.5        2.5
4   1948    1   4   1948-01-04   38   64    76   33  -56 -11.5        ect
5   1948    1   5   1948-01-05    0    0    76   -6  -83 -44.5          .
6   1948    1   6   1948-01-06  107    0    51   22  -61 -19.5          .
7   1948    1   7   1948-01-07  147    0    25   28  -17   5.5          .
8   1948    1   8   1948-01-08    8   13    25   39  -83 -22.0
9   1948    1   9   1948-01-09    0    0    25   -6 -117 -61.5
10  1948    1   10  1948-01-10    8   10    25  -11 -156 -83.5

感谢您的建议。

解决方法

所以我尝试了您的建议:

mso_light %>%
  group_by(month,day) %>%
  summarise(CliAvgT = mean(TAVG[1981:2010],na.rm = T)) %>%
  mutate(Avg_DepT = CliAvgT - TAVG) %>%
  ungroup()

我收到此错误:

`summarise()` regrouping output by 'month' (override with `.groups` argument)
Error: Problem with `mutate()` input `Avg_DepT`.
x object 'TAVG' not found
i Input `Avg_DepT` is `CliAvgT - TAVG`.
i The error occured in group 1: month = 1.
Run `rlang::last_error()` to see where the error occurred.

我运行了rlang::last_trace(),结果如下。这是我的困惑,TAVG数据库的每个实例都存在mso_light

> rlang::last_trace()
<error/dplyr_error>
Problem with `mutate()` input `Avg_DepT`.
x object 'TAVG' not found
i Input `Avg_DepT` is `CliAvgT - TAVG`.
i The error occured in group 1: month = 1.
Backtrace:
     x
  1. \-`%>%`(...)
  2.   +-base::withVisible(eval(quote(`_fseq`(`_lhs`)),env,env))
  3.   \-base::eval(quote(`_fseq`(`_lhs`)),env)
  4.     \-base::eval(quote(`_fseq`(`_lhs`)),env)
  5.       \-`_fseq`(`_lhs`)
  6.         \-magrittr::freduce(value,`_function_list`)
  7.           \-function_list[[i]](value)
  8.             +-dplyr::mutate(.,Avg_DepT = CliAvgT - TAVG)
  9.             \-dplyr:::mutate.data.frame(.,Avg_DepT = CliAvgT - TAVG)
 10.               \-dplyr:::mutate_cols(.data,...)
<parent: error/simpleError>
object 'TAVG' not found
> 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。