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

2024-05-30

Using df数据框

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 df1 and df2并乘以df1$sum_rain by 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dplyr:同一公式中全年每日值的总和以及特定每日值的总和 的相关文章

  • 保存/加载 data.table 的最快方法

    我想做的实际上是使用最快的可用方法来存储data table以便进一步处理 大致如下 从 CSV RDS 读取原始数据 将其转换为data table 将其保存为针对重新读取而优化的格式 RDS 似乎不适用于data table 是对的吗
  • 您使用 Attach() 或按名称或切片调用变量吗?

    许多介绍 R 的书籍和指南都是从附加一个 R 语言的实践开始的 data frame这样您就可以通过名称调用变量 我一直发现用以下方式调用变量是有利的 符号或方括号切片 2 这样我就可以使用多个data frames 而不混淆它们和 或使用
  • 将值添加到 R 中 for 循环内的向量

    我刚刚开始学习 R 我编写了这段代码来学习函数和循环 squared lt function x m lt c for i in 1 x y lt i i c m y return m squared 5 NULL 为什么这个返回NULL
  • 在闪亮仪表板中显示/隐藏菜单项

    当进入应用程序时 我需要隐藏一个菜单项 当用户选择某个值时 菜单项必须出现 我努力了shinyjs功能hidden 并且它隐藏了一个 menuItem 但是当使用show or toggle 菜单项不会出现 我发现了Rshinydashbo
  • R、GeoJSON 和 Leaflet

    我最近从 R Bloggers com 的帖子中了解了 leafletjs com 我想要实现的一个此类教程是使用传单创建交互式分区统计图 http leafletjs com examples choropleth html http l
  • R 中具有 NA 值的聚合栅格

    我在 R 中有一个分辨率为 1 公里的栅格 其 NA 值分布广泛 但位置不规则 即 包含数据的单元格不连续 并且 NA 值分散 我正在尝试使用用户定义的平均圆角函数 包括在下面 以 5 公里分辨率 因子 5 聚合此栅格 使用 raster
  • 中断、保存并稍后继续循环的最佳方法

    事情是这样的 我有一个需要几天时间才能运行的循环 我想中断循环 检查进度 然后稍后继续 目前 我正在使用以下内容 for i in 1 100000 Sys sleep i 2 5 print i write csv i i csv 我检查
  • 评估 R 中字符串指向的函数

    假设我有以下内容 x lt 1 10 squared lt function x x 2 y lt squared 我希望能够使用 y 定义的字符串来评估该函数 像 eval y 这样的东西 我知道这是错误的 但会返回 1 1 4 9 16
  • 将线条剪裁到绘图区域并在绘图区域外显示文本

    我想限制绘图的可见 y 范围 为了保留超出此范围的值 我需要设置oob 出界 to rescale none这效果很好 不过 我还想在图外的页边空白处添加一些文本 为了做到这一点 我需要关闭剪辑 这会导致超出范围的值被绘制在绘图区域之外的边
  • 替换为 NA

    我有一个包含条目的数据框 看来这些值没有被视为 NA 因为 is na 返回 FALSE 我想将这些值转换为 NA 但找不到方法 Use dfr dfr
  • 在 RStudio 控制台中显示西里尔字母

    我在 Rstudio 控制台中显示俄语字符时遇到问题 我使用 readxl 包加载带有俄语的 Excel 文件 西里尔字母在数据框中正确显示 但是 如果我运行一个输出包含变量名称的函数 RStudio 控制台将显示符号而不是正确的西里尔字符
  • 如何编写一个也接受字符输入的 NES 函数?

    我正在开发一个将字符串作为函数参数的 R 包 现在我想使用非标准评估来允许非字符串输入 另外 为了保持向后兼容性 我想保留函数接受字符串的可能性 哈德利给出了example https cran r project org web pack
  • 为闪亮的应用程序创建桌面图标

    当我在基本 R 提示中提供以下代码时 我会在浏览器中打开一个闪亮的应用程序 shiny runApp C Myapp 我使用 Windows 7 我试图创建一个桌面图标 以避免我的客户每次想要使用该应用程序时都键入上述代码 我创建了一个桌面
  • 哪种 LaTeX 包与 knit 一起使用以获得更多的表格控制?禁忌?

    我正在用 knitr 写一张更长的桌子xtable和tabular environment longtable 在 longtable 包中时print将它们纳入我的 Rnw file 问题是我对longtable环境控制不够 我有一些文本
  • 根据绘图单击事件对数据框进行子集化

    我有下面的数据框 Name lt c John Bob Jack Number lt c 3 3 5 NN lt data frame Name Number 还有一个简单闪亮的应用程序 可以从中创建一个绘图直方图 我的目标是单击直方图的一
  • 如何在闪亮的应用程序中显示矩阵,并用条件指定颜色?

    我有一个具有正值和负值的矩阵 M 我正在尝试使用 DT 包在闪亮的应用程序中显示为表格 我想用不同的颜色显示矩阵 红色的正数和负数 例如 到目前为止 我只能以一对一的方式添加颜色 但我想以这种方式添加颜色 如果matrix values g
  • R:使用 as.formula 修复模型中的模型调用

    我有一个gls模型 其中我将公式 来自另一个对象 分配给模型 equation lt as formula aic obj row model gt equation temp avg I year 1950 mod1 lt gls equ
  • 是否可以在 R 中创建自定义 pch 形状?

    R 中的许多绘图函数都使用图形参数pch指定数据点的形状 根据R 文档 https www rdocumentation org packages graphics versions 3 6 2 topics points 有 26 个矢量
  • 在R中提取其他两个字符串之间的字符串

    我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串 可以是任何内容 例如 我有一个字符串 a lt anything goes here STR1 GET ME STR2 anything goes here 我需要提取
  • 在 R 中使用 ggplot2 叠加两个图

    有两个数据框 df1 df2我需要使用 ggplot2 创建线图并显示在同一个图表上 df1 x y 2 30 4 25 6 20 8 15 df2 x y 2 12 4 16 6 20 8 24 用于绘制第一个 df p1 lt ggpl

随机推荐

  • 使用元表中的多个条目的 Compex MySQL 左连接

    我正在尝试创建一个查询来从主表 WordPress 用户表 和用户元表中获取信息 如果您不熟悉 WP DB 架构 wp users 保存基本用户信息及其 ID wp usermeta 保存 ID meta key 和 meta value
  • Capistrano 部署擦除数据库?

    我已成功使用 Capistrano 将我的应用程序部署到生产环境 但我不明白如何处理我的数据库 我正在使用颠覆和乘客 当我运行 cap 部署时 新部署会重新启动一切 它会清除添加到数据库中的数据 显然 必须有一个解决方案 但我很惊讶没有在网
  • argparse 接受一切

    有没有办法有一个argparse ArgumentParser在读取未知选项时不引发异常 而是将所有带有值的未知选项放入字典中 并将那些没有值的选项放入列表中 例如 假设解析器中没有定义参数prog py 我传递了两个参数 prog py
  • Chrome 扩展 - 访问 iframe 元素

    我正在附加一个iframe到页面使用content script with src set to chrome extension getURL myPage 稍后在某些事件中 我想从框架中检索一些元素 我尝试了以下代码content sc
  • 闪亮的点击/画笔不适用于非笛卡尔坐标?

    我正在开发一个闪亮的应用程序 它应该让用户在由 ggplot2 生成的世界地图上选择地理数据点 如这个例子 http shiny rstudio com gallery plot interaction selecting points h
  • Java8:使用 Stream / Map-Reduce / Collector 将 HashMap 转换为 HashMap

    我知道如何 改造 一个简单的JavaList from Y gt Z i e List
  • ExpressJS 将变量传递给 JavaScript

    我对此完全迷失了 我正在使用 NodeJS 获取 JSON 我需要将变量传递到我的页面并让 JavaScript 使用数据 app get test function req res res render testPage myVar My
  • 无法解析 com.twitter.sdk.android:twitter:1.0.1 所需的 com.android.support:support-v4:21.0.0

    我刚刚开始使用 Twitter 的 Fabric 插件对文件进行更改后 当我构建项目时 我收到此错误 Error A problem occurred configuring project app gt Could not resolve
  • 如何检测 UIImage 的非透明部分何时与 UIImage 的另一个非透明部分接触

    我在完成一些我认为会容易得多的事情时遇到了困难 每当 UIImage 中图片的非透明部分接触 UIImage 中包含的图像的另一个非透明部分时 我试图运行一个方法 我举了一个例子来帮助进一步解释我的问题 正如您在上图中看到的 我有两个三角形
  • 小数纬度/经度的最大长度 度?

    地球表面一度纬度和经度的最大长度是多少 以公里或英里为单位 但请注明 我不确定我是否说得足够清楚 让我重新表述一下 众所周知 地球不是一个完美的圆 赤道 或厄瓜多尔 纬度 经度变化 1 0 可能意味着一个距离 而两极的相同变化可能意味着另一
  • javascript 中的语句是为....

    任何人都可以解释如何在 javascript 中使用 for in 语句 我读过w3school的文章 但我认为它不太清楚 下面是代码 请解释一下 A for in loop https developer mozilla org e
  • “$$ 处或附近的未终止的美元引号字符串

    我试图使用 DBeaver 声明一些变量并不断遇到此错误 Unterminated dollar quoted string at or near DO DECLARE A integer B integer BEGIN END 有任何想法
  • 获取php中两个日期之间的天数[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我试图获取两个日期之间的天数 但返回的结果不正确 这是我的尝试 t time get the time Y m d g
  • 运行包含库 jar 的 jar 时出现 Java NoClassDefFoundError

    几个小时后 即使在阅读了大量文档和问题之后 我还是束手无策 我确信我错过了一些明显的东西 但我就是无法弄清楚 我创建了许多 java 文件 包括带有 main 方法的单个入口点 该类还使用一个 库 类 该类位于 jar 文件 mylib j
  • 是的,验证 2 个以上相关输入

    我正在使用 yup 和 formik 来管理我的表单 我使用 yup 进行表单验证 我面临的问题是 假设我有三个字段fieldA fieldB and fieldC 验证是 fieldA fieldB必须等于fieldC 这是我所做的使用
  • Android:拦截后退键

    由于后退键会破坏我的应用程序并且所有数据都会丢失 因此我需要拦截它以询问用户这是否真的是他想要的 我想到了以下结构 Override public boolean onKeyDown int keyCode KeyEvent event i
  • 强制刷新工作表的“最后一个”单元格

    Pressing Ctrl End in Excel takes you to the bottom right most cell of the worksheet 如果删除最后的行或列并保存工作簿 最后一个单元格以及滚动条都会更新 我记
  • 打开 Excel 工作簿时自动运行 VBA 代码

    我有 VBA 代码 我想在打开 Excel 工作簿时运行 我尝试在代码应该运行的工作表中创建一个公共过程 Public Sub Workbook Open Some code here End Sub 工作簿打开时它不会运行 它应该在其中一
  • Seaborn HeatMap - 如何在多个不同的数据集中设置颜色分级

    所以我需要在seaborn中创建许多具有不同数据规模的热图 有些范围是 0 100 有些是 100 到 100 我需要做的是保持所有图表的颜色分级相同 例如 我希望任何低于 0 的值稳定地从深蓝色变为浅蓝色 而高于 0 的值则逐渐变为深红色
  • dplyr:同一公式中全年每日值的总和以及特定每日值的总和

    Using df数据框 date lt rep as Date seq as Date 2003 01 01 as Date 2005 12 31 by 1 format Y m d 9 site lt c rep Site 1 3 109