【问题标题】:Calculation from a formula using tidyverse in R在 R 中使用 tidyverse 从公式计算
【发布时间】:2021-03-25 09:17:45
【问题描述】:

我想使用 R 中的 tidyverse 包计算以下指数。

其中 rm 是 m 月的月降雨量,m = 1,2,3………12

为此,我使用以下代码

library(tidyverse) 
library(seas) 
library(openxlsx)
library(lubridate)

## get mscdata from "seas" packages
data(mscdata)
dat <- (mksub(mscdata, id=1108447))

Monthly <- dat %>% 
  mutate(Year = year(date),
         Month = month(date),
         Day = day(date)) %>% 
  group_by(Year, Month) %>% 
  summarise(Monthly = sum(precip)) 

Monthly %>% 
  group_by(Year) %>% 
  summarise(Rk = sum(Monthly),
            Ck = (1/Rk)*sum(Month*Monthly),
            Zk = sqrt((1/Rk)*sum(Month-Ck)^2*Monthly))

Rk和Ck的计算与excel计算相匹配。但是 Zk 的值不匹配。我犯了什么错误?

【问题讨论】:

  • Zk 的预期值是多少?你需要Zk = sqrt((1/Rk)*(Month-Ck)^2*Monthly)) 吗?
  • 我想根据我提供的公式计算。 excel 值为 4.145470566、3.81835063、3.833627623、3.790112196、4.185091683。 Rk、Ck、Zk 应该是每年一个。

标签: r tidyverse


【解决方案1】:

计算sum 太早了。

library(dplyr)

Monthly %>% 
  group_by(Year) %>% 
  summarise(Rk = sum(Monthly),
            Ck = (1/Rk)*sum(Month*Monthly),
            Zk = sqrt((1/Rk)*sum((Month-Ck)^2*Monthly)))

#   Year     Rk     Ck     Zk
#1  1975 1320.1 7.4674 4.1455
#2  1976 1008.3 5.5078 3.8184
#3  1977 1032.3 7.4917 3.8336
#4  1978 1016.8 6.3460 3.7901
#5  1979  986.2 7.4500 4.1851
#6  1980 1418.5 7.2960 3.9661
#7  1981 1459.2 7.0578 3.7275
#8  1982 1260.1 6.0253 4.2520
#9  1983 1489.5 6.2925 4.0069
#...
#...

【讨论】:

    【解决方案2】:

    要匹配您的 Excel 数字,您需要添加一对括号:

    Monthly %>% 
      group_by(Year) %>% 
      summarise(Rk = sum(Monthly),
                Ck = (1/Rk)*sum(Month*Monthly),
                Zk = sqrt((1/Rk)*sum(((Month-Ck)^2)*Monthly)))
    

    【讨论】:

    • 变量 Monthly_rain 不应该只是 Monthly 吗?正如@Ronak Shah 所说,一个有更多问题的新问题会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2011-12-05
    • 1970-01-01
    • 2022-07-06
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多