如何解决如何找到温度与正常温度之间的偏差-R 4.0.0
我一直在研究一个将在多个气候站通用的数据集,用于分析温度和降水。我遇到了设计“气候规范”的砖墙,我已经成功计算了每日平均温度TAVG
,每月平均温度AVG_TAVG
,并总结了PRCP
和SNow
每月总计。
我处于停滞状态的是计算偏离正常值的时间,目前,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 举报,一经查实,本站将立刻删除。