gpt4 book ai didi

r - 取网格化(坐标排序)年度时间数据集的 30 年平均值

转载 作者:行者123 更新时间:2023-12-05 03:22:00 25 4
gpt4 key购买 nike

我有一个网格化数据集的 .csv。每个网格(由纬度/经度坐标表示)都有一个从 1950 年到 2100 年的年度时间序列和伴随值。

格式如下:

<表类="s-表"><头><次>次 经<日>纬度 值1值2值3<正文>1950-01-01-80.7942.961231951-01-01-80.7942.962461952-01-01-80.7942.963691953-01-01-80.7942.9648121954-01-01-80.7942.96510151955-01-01-80.7942.961231956-01-01-80.7942.962461957-01-01-80.7942.963691958-01-01-80.7942.9648121959-01-01-80.7942.96510151960-01-01-80.7942.96123....................................1950-01-01-80.6342.961231951-01-01-80.7942.96246....................................1950-01-01-79.8844.291231951-01-01-79.8844.26246

您可以在 https://climatedata.ca/download/ 获得 .csv 数据集的真实示例(选择频率:每年;变量:任何人;位置:在 map 上选择2+个格子)

我正在尝试弄清楚如何为每个网格取 30 年的平均值。

例如,对于第一个网格 (-80.79, 42.96),我想取 1950-1969、1970-2005、2006-2039、2049-2069 和 2070-2100 的平均值。然后对第二个网格做同样的事情。等等

或者,

对每个网格取 1950-1969 年的平均值,然后对每个网格取 1970-2005 年的平均值。等等

基本上,我希望能够对所有网格重复相同的计算。

最佳答案

下面是使用 dplyr 的方法。 group_by 每个时期(这里四舍五入到最接近的 30 年)和网格单元格,然后我们可以使用 summarize(across(... 来计算平均值每组中的这三个值。

library(dplyr)
df1 %>%
group_by(yr30 = floor(lubridate::year(time)/30)*30, lon, lat) %>%
summarize(across(value1:value3, mean), .groups = "drop")


# A tibble: 4 × 6
yr30 lon lat value1 value2 value3
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1950 -80.8 43.0 2.75 5.5 8.25
2 1950 -80.6 43.0 1 2 3
3 1950 -79.9 44.3 2 4 6
4 1950 -79.9 44.3 1 2 3

使用的示例数据:

df1 <- data.frame(
time = c("1950-01-01","1951-01-01","1952-01-01",
"1953-01-01","1954-01-01","1955-01-01","1956-01-01",
"1957-01-01","1958-01-01","1959-01-01","1960-01-01","1950-01-01",
"1951-01-01","1950-01-01","1951-01-01"),
lon = c(-80.79,-80.79,-80.79,-80.79,-80.79,
-80.79,-80.79,-80.79,-80.79,-80.79,-80.79,-80.63,-80.79,
-79.88,-79.88),
lat = c(42.96,42.96,42.96,42.96,42.96,42.96,
42.96,42.96,42.96,42.96,42.96,42.96,42.96,44.29,44.26),
value1 = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 1L, 2L, 1L, 2L),
value2 = c(2L, 4L, 6L, 8L, 10L, 2L, 4L, 6L, 8L, 10L, 2L, 2L, 4L, 2L, 4L),
value3 = c(3L, 6L, 9L, 12L, 15L, 3L, 6L, 9L, 12L, 15L, 3L, 3L, 6L, 3L, 6L)
)
df1$time = as.Date(df1$time)

关于r - 取网格化(坐标排序)年度时间数据集的 30 年平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72850275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com