【问题标题】:Use loop function in R to calculate sedimentation rate?在R中使用循环函数来计算沉降率?
【发布时间】:2019-10-03 05:00:59
【问题描述】:

我有一些河流沉积数据。每条河流由2个站点组成,有2-3个沉淀板。实验进行了10年,每隔1-3年测量每个板上沉积物的沉积物深度(mm)。我想知道是否可以使用 R 循环来计算每条河流的每个站点的沉降率?附上样本数据。

River	Site	Plate	Year	"Sedement 
depth(mm)"
ES1	SiteA	Plate 1	2009	220
ES1	SiteA	Plate 1	2011	207
ES1	SiteA	Plate 1	2012	203
ES1	SiteA	Plate 1	2013	210
ES1	SiteA	Plate 1	2015	211.7
ES1	SiteA	Plate 1	2016	218
ES1	SiteA	Plate 1	2018	207
ES1	SiteA	Plate 1	2019	219.7
ES1	SiteA	Plate 2	2009	183
ES1	SiteA	Plate 2	2011	173
ES1	SiteA	Plate 2	2012	180
ES1	SiteA	Plate 2	2013	180
ES1	SiteA	Plate 2	2015	184
ES1	SiteA	Plate 2	2016	185
ES1	SiteA	Plate 2	2018	178
ES1	SiteA	Plate 2	2019	185.3
ES2	SiteB	Plate 1	2009	191
ES2	SiteB	Plate 1	2011	190
ES2	SiteB	Plate 1	2012	190
ES2	SiteB	Plate 1	2013	191
ES2	SiteB	Plate 1	2015	192.3
ES2	SiteB	Plate 1	2016	195
ES2	SiteB	Plate 1	2018	186
ES2	SiteB	Plate 1	2019	190.3
ES2	SiteB	Plate 2	2009	212
ES2	SiteB	Plate 2	2011	214
ES2	SiteB	Plate 2	2012	205
ES2	SiteB	Plate 2	2013	203
ES2	SiteB	Plate 2	2015	190.7
ES2	SiteB	Plate 2	2016	197
ES2	SiteB	Plate 2	2018	188
ES2	SiteB	Plate 2	2019	191.3

每个站点的沉降率可以计算如下;

例如ES1,SiteA,2015 年 = 板 1 (211.7-210)/2(年差异) 板 2 (184-180)/2

  Sedimentation rate for 2015 = avg [Plate 1 (211.7-210)/2(year diff)+ Plate 2 (184-180)/2]

【问题讨论】:

  • 请将输入数据以文本形式发布
  • 最好以可复制粘贴的格式包含您的数据,例如来自dput 的输出,并包含所需输出的明确声明。如果您包含到目前为止您尝试过的代码以及它为什么不起作用的解释(例如,您遇到的错误),这也很有帮助。 diff 在这里很有用(查看?diff),而不是使用循环,尝试在dplyr 中使用group_by 或在data.table 中使用by,并在进行计算之前按板块和站点分组。
  • 感谢您告诉我。我刚刚将我的数据添加为文本。
  • 谢谢 Lyngbakr,我会用 dplyr 试试

标签: r


【解决方案1】:

假设您已将数据上传到 R。然后,您可以执行dplyr

library(dplyr)
#create the year diff column, the rate diff column and the rate diff column
table <- table %>%
   group_by(River, Site, Plate) %>%
   mutate(Year_diff = Year - lag(Year),
          sediment_depth_diff = Sedement_depth_mm - lag(Sedement_depth_mm),
          sediment_depth_diff_per_year = sediment_depth_diff/Year_diff)

#create new table with average rate per river, site, year
table_summary <- table %>% 
    ungroup() %>%
    group_by(River, Site, Year) %>%
    summarise(avg_rate = mean(sediment_depth_diff_per_year))

【讨论】:

  • 谢谢吉尔赫姆
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2021-12-19
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多