dplyr:同一公式中全年的每日值总和与特定的每日值总和

闪亮的

使用dfdata.frame

date <- rep(as.Date(seq(as.Date("2003-01-01"), 
                        as.Date("2005-12-31"), by = 1), 
                    format="%Y-%m-%d"), 9)
site <- c(rep("Site_1", 3*1096), rep("Site_2", 3*1096), rep("Site_3", 3*1096))
rain <- c(rep(as.numeric(sample(1.1e6:87e6, 1096, replace=T)),3),
               rep(as.numeric(sample(1.3e5:56e6, 1096, replace=T)),3),
               rep(as.numeric(sample(5e5:77e6, 1096, replace=T)),3))
parameter <- rep(c(rep("param_A", 1096), rep("param_B", 1096), rep("param_c", 1096)), 3)
value <- c(runif(1096, 0.005, 2.3)/1e6, 
           runif(1096, 0.5, 3.1)/1e6,
           runif(1096, 0.003, 0.04)/1e6,
           runif(1096, 0.002, 1.7)/1e6, 
           runif(1096, 0.3, 4.5)/1e6,
           runif(1096, 0.001, 0.07)/1e6,
           runif(1096, 0.007, 2.7)/1e6, 
           runif(1096, 0.4, 2.8)/1e6,
           runif(1096, 0.004, 0.09)/1e6)

df <- data.frame( date, site, rain, parameter, value)
df[c(1:4, 8:10, 30:35, 60:65, 90:97, 100:125, 524:645, 
     1000:1100, 1400:1540, 1789:1890, 2100:2250,
     2459:2765, 3942:3987, 4600:4698, 5210:5310, 6081:6154, 7613:7689, 
     8809:8888, 9120:9190, 9600:9650), 5] <- NA

对于每个站点,我想针对每个参数每年计算一个变量,让我们将其命名saturation为等于

(sum(rain*value)/sum(rain)) for days where value is not NA * sum(rain per year)

我想使用来做dplyr我尝试了以下代码

library(dplyr)
df1 <- df %>%
  dplyr::mutate(year = factor(format(date, "%Y"))) %>%
  dplyr::arrange(site, year, parameter)  %>%
  dplyr::group_by(site, year, parameter ) %>%
  dplyr::summarise(sum_rain = sum(rain))

df2 <- df %>%
  dplyr::mutate(year = factor(format(date, "%Y"))) %>%
  dplyr::arrange(site, year, parameter)  %>%
  dplyr::group_by(site, year, parameter ) %>%
  dplyr::filter (!is.na(value)) %>%
  dplyr::summarise(specific_days = sum(rain*value)/sum(rain))

saturation <- df1$sum_rain * df2$specific_days

它工作正常,并给了我我想要的东西。但是,我不得不创建两个data.frames df1df2繁衍df1$sum_rain通过df2$specific_days获得saturation无论如何,没有使用dplyr创建两个data.frames就能做到这一点。

阿克伦

我们可以通过子集化的单链做到这一点rain的非NA“价值”与is.na

res <- df %>%
        mutate(year = factor(format(date, "%Y"))) %>%
        arrange(site, year, parameter)  %>%
        group_by(site, year, parameter ) %>% 
        summarise(sum_rain = sum(rain), 
            specific_days = sum(rain*value, na.rm=TRUE)/sum(rain[!is.na(value)])) %>% 
        mutate(saturation = sum_rain * specific_days)
res %>%
    as.data.frame()
#      site year parameter    sum_rain    specific_days saturation
#1  Site_1 2003   param_A 15988875602 0.00000123589041 19760.4980
#2  Site_1 2003   param_B 15988875602 0.00000172552158 27589.1499
#3  Site_1 2003   param_c 15988875602 0.00000002161544   345.6067
#4  Site_1 2004   param_A 15180127505 0.00000116507160 17685.9355
#5  Site_1 2004   param_B 15180127505 0.00000181695952 27581.6772
#6  Site_1 2004   param_c 15180127505 0.00000002185010   331.6873
#7  Site_1 2005   param_A 16058234005 0.00000120130563 19290.8469
#8  Site_1 2005   param_B 16058234005 0.00000186185975 29898.1795
#9  Site_1 2005   param_c 16058234005 0.00000002049335   329.0870
#10 Site_2 2003   param_A  9930134442 0.00000079639249  7908.2845
#11 Site_2 2003   param_B  9930134442 0.00000246576645 24485.3923
#12 Site_2 2003   param_c  9930134442 0.00000003348046   332.4655
#13 Site_2 2004   param_A 10926778631 0.00000088141235  9630.9976
#14 Site_2 2004   param_B 10926778631 0.00000244015257 26663.0070
#15 Site_2 2004   param_c 10926778631 0.00000003448817   376.8447
#16 Site_2 2005   param_A  9599581600 0.00000089477811  8589.4955
#17 Site_2 2005   param_B  9599581600 0.00000238522373 22897.1498
#18 Site_2 2005   param_c  9599581600 0.00000003442887   330.5027
#19 Site_3 2003   param_A 13711985538 0.00000142896664 19593.9700
#20 Site_3 2003   param_B 13711985538 0.00000157700917 21623.9270
#21 Site_3 2003   param_c 13711985538 0.00000004665944   639.7935
#22 Site_3 2004   param_A 14371047715 0.00000134324260 19303.8035
#23 Site_3 2004   param_B 14371047715 0.00000156583784 22502.7303
#24 Site_3 2004   param_c 14371047715 0.00000004859102   698.3039
#25 Site_3 2005   param_A 13729491381 0.00000131305086 18027.5205
#26 Site_3 2005   param_B 13729491381 0.00000159005889 21830.6999
#27 Site_3 2005   param_c 13729491381 0.00000004616979   633.8878





identical(df1['sum_rain'], res['sum_rain'])
#[1] TRUE

identical(df2['specific_days'], res['specific_days'])
#[1] TRUE

无需另做join这将提供与OP一样的预期输出,并且不会提供任何不正确的输出。


或者这也可以通过 data.table

library(data.table)
setDT(df)[, .(sum_rain = sum(rain), 
              specific_days = sum(rain*value, na.rm=TRUE)/sum(rain[!is.na(value)])),
            by =  .(site, year= factor(format(date, "%Y")), parameter)
      ][, saturation := sum_rain * specific_days][]
#      site year parameter    sum_rain    specific_days saturation
# 1: Site_1 2003   param_A 15988875602 0.00000123589041 19760.4980
# 2: Site_1 2004   param_A 15180127505 0.00000116507160 17685.9355
# 3: Site_1 2005   param_A 16058234005 0.00000120130563 19290.8469
# 4: Site_1 2003   param_B 15988875602 0.00000172552158 27589.1499
# 5: Site_1 2004   param_B 15180127505 0.00000181695952 27581.6772
# 6: Site_1 2005   param_B 16058234005 0.00000186185975 29898.1795
# 7: Site_1 2003   param_c 15988875602 0.00000002161544   345.6067
# 8: Site_1 2004   param_c 15180127505 0.00000002185010   331.6873
# 9: Site_1 2005   param_c 16058234005 0.00000002049335   329.0870
#10: Site_2 2003   param_A  9930134442 0.00000079639249  7908.2845
#11: Site_2 2004   param_A 10926778631 0.00000088141235  9630.9976
#12: Site_2 2005   param_A  9599581600 0.00000089477811  8589.4955
#13: Site_2 2003   param_B  9930134442 0.00000246576645 24485.3923
#14: Site_2 2004   param_B 10926778631 0.00000244015257 26663.0070
#15: Site_2 2005   param_B  9599581600 0.00000238522373 22897.1498
#16: Site_2 2003   param_c  9930134442 0.00000003348046   332.4655
#17: Site_2 2004   param_c 10926778631 0.00000003448817   376.8447
#18: Site_2 2005   param_c  9599581600 0.00000003442887   330.5027
#19: Site_3 2003   param_A 13711985538 0.00000142896664 19593.9700
#20: Site_3 2004   param_A 14371047715 0.00000134324260 19303.8035
#21: Site_3 2005   param_A 13729491381 0.00000131305086 18027.5205
#22: Site_3 2003   param_B 13711985538 0.00000157700917 21623.9270
#23: Site_3 2004   param_B 14371047715 0.00000156583784 22502.7303
#24: Site_3 2005   param_B 13729491381 0.00000159005889 21830.6999
#25: Site_3 2003   param_c 13711985538 0.00000004665944   639.7935
#26: Site_3 2004   param_c 14371047715 0.00000004859102   698.3039
#27: Site_3 2005   param_c 13729491381 0.00000004616979   633.8878

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询-从每小时总和中查找每日MIN值

来自分类Dev

如果我有每日值,如何使用Pandas计算每周累积值总和?

来自分类Dev

同一Lambda中2个值的总和?

来自分类Dev

在PostgreSQL中计算每日总和

来自分类Dev

在定义的时间范围内计算每日总和与一周中同一天的平均值之间的差异。SQL 10g Oracle

来自分类Dev

计算在定义的时间范围内一周中同一天的每日总和与平均值之间的差异。SQL 10g Oracle

来自分类Dev

汇总和汇总每日数据到python中的月份

来自分类Dev

PostgreSQL:汇总持续时间列表中的每日总和

来自分类Dev

总和值的总和值

来自分类Dev

在哈希中查找数组的特定值的总和

来自分类Dev

合并具有相同值和总和值的同一列和表中的行

来自分类Dev

每日估计值

来自分类Dev

如何获取同一月份的特定行并获取其总和值

来自分类Dev

如何使用MySQL获取数字的每日总和?

来自分类Dev

来自同一表的SQL总和值

来自分类Dev

dplyr汇总和group_by获得唯一值

来自分类Dev

基于数据帧同一行中不同列的值的累积总和(避免循环)

来自分类Dev

Python:查找特定的值总和?

来自分类Dev

特定模式旁边的总和值

来自分类Dev

通过除以行式总和,将矩阵归一化为 [0,1] 中的值

来自分类Dev

用于计算一列中与另一表中多列匹配的值的总和的 Google 表格公式

来自分类Dev

如何计算同一列中的多个字符串值以及相邻列中的总和值

来自分类Dev

获取由同一表中的其他两个列值确定的列值的总和

来自分类Dev

获取属于特定范围的值的每日百分比

来自分类Dev

如果与另一列中的列总和值匹配,则获取列总和值

来自分类Dev

列表中df中列的特定值的NA的总和

来自分类Dev

使用javascript从值等于特定总和的数组中获取一对元素

来自分类Dev

使用javascript从值等于特定总和的数组中获取一对元素

来自分类Dev

哈希中先前值的总和

Related 相关文章

  1. 1

    SQL查询-从每小时总和中查找每日MIN值

  2. 2

    如果我有每日值,如何使用Pandas计算每周累积值总和?

  3. 3

    同一Lambda中2个值的总和?

  4. 4

    在PostgreSQL中计算每日总和

  5. 5

    在定义的时间范围内计算每日总和与一周中同一天的平均值之间的差异。SQL 10g Oracle

  6. 6

    计算在定义的时间范围内一周中同一天的每日总和与平均值之间的差异。SQL 10g Oracle

  7. 7

    汇总和汇总每日数据到python中的月份

  8. 8

    PostgreSQL:汇总持续时间列表中的每日总和

  9. 9

    总和值的总和值

  10. 10

    在哈希中查找数组的特定值的总和

  11. 11

    合并具有相同值和总和值的同一列和表中的行

  12. 12

    每日估计值

  13. 13

    如何获取同一月份的特定行并获取其总和值

  14. 14

    如何使用MySQL获取数字的每日总和?

  15. 15

    来自同一表的SQL总和值

  16. 16

    dplyr汇总和group_by获得唯一值

  17. 17

    基于数据帧同一行中不同列的值的累积总和(避免循环)

  18. 18

    Python:查找特定的值总和?

  19. 19

    特定模式旁边的总和值

  20. 20

    通过除以行式总和,将矩阵归一化为 [0,1] 中的值

  21. 21

    用于计算一列中与另一表中多列匹配的值的总和的 Google 表格公式

  22. 22

    如何计算同一列中的多个字符串值以及相邻列中的总和值

  23. 23

    获取由同一表中的其他两个列值确定的列值的总和

  24. 24

    获取属于特定范围的值的每日百分比

  25. 25

    如果与另一列中的列总和值匹配,则获取列总和值

  26. 26

    列表中df中列的特定值的NA的总和

  27. 27

    使用javascript从值等于特定总和的数组中获取一对元素

  28. 28

    使用javascript从值等于特定总和的数组中获取一对元素

  29. 29

    哈希中先前值的总和

热门标签

归档