R语言 如何将某个值与多个月的特定坐标进行匹配?

9bfwbjaz  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(136)

我正在使用卫星数据来确定100多个采样点的净初级生产力(NPP)。对于每个位置,我需要获得10年(2007-2017)期间每个月(1月-12月)的NPP值。我需要找到一种方法来通过代码自动化此过程。
下面是我的数据结构:
'''

structure(list(Month = c("January-", "January-", "January-", 
"January-", "January-"), long = c(-179.916672, -179.75, -179.583328, 
-179.416672, -179.25), lat = c(39.916668, 39.916668, 39.916668, 
39.916668, 39.916668), npp = c(297.813, 304.971, 292.946, 296.196, 
285.804)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", 
"data.frame"))

'''
第一个样本的坐标是14. 58,168. 03,在一月和十二月之间的每个月都有一个精确的匹配。我需要找到这些值,但数据集非常大。如果有人能以任何方式帮助我,帮助自动化这个过程,我将非常感激。

zzwlnbp8

zzwlnbp81#

据我所知,您的示例数据不足。因此,我创建了一个DF,包含3个不同的示例位置和相应的随机latlong。我在上述时间范围内创建了1000个随机日期和1000个随机app-见下文。(1000用于避免下表中的NA过多)此DF假设每个位置在同一天提供app值。
在对yearmonth做了一些快捷方式后,数据按位置汇总app,并以更宽的格式显示。这就是我对 * 十年跨度中每个月 * 的理解

library(lubridate)
library(tidyverse)

df |> 
  mutate(m = month(date, label = T)) |> 
  mutate(y = year(date)) |> 
  group_by(y, m, location) |> 
  summarise(sum= sum(npp)) |> 
  pivot_wider(names_from = m, values_from = sum)
#> `summarise()` has grouped output by 'y', 'm'. You can override using the
#> `.groups` argument.
#> # A tibble: 33 × 14
#> # Groups:   y [11]
#>        y location   Jan   Feb   Mär   Apr   Mai   Jun   Jul   Aug   Sep   Okt
#>    <dbl> <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  2007 A        2544. 1260. 2303. 1665. 1952. 2440. 2842. 2323. 1744. 2827.
#>  2  2007 B        2412. 1473. 2126. 1484. 1953. 2726. 3251. 2249. 1924. 2598.
#>  3  2007 C        2212. 1460. 2233. 1816. 2085. 2604. 2871. 1996. 1960. 2714.
#>  4  2008 A        2397. 2141. 2352. 3375. 2045. 1757. 1476. 2813. 3169. 3593.
#>  5  2008 B        2562. 2314. 2299. 3634. 1879. 1544. 1568. 2805. 3101. 3712.
#>  6  2008 C        2487. 2269. 2159. 3740. 1727. 1631. 1462. 3048. 2872. 3742.
#>  7  2009 A        1538. 1241. 2434. 1916. 2757. 1937. 1720. 1335. 2600. 2809.
#>  8  2009 B        1643. 1312. 2410. 2170. 2817. 1973. 1566. 1253. 2720. 2758.
#>  9  2009 C        1549. 1231. 2331. 2490. 2766. 1886. 1472. 1354. 2810. 2727.
#> 10  2010 A        2732. 2463. 1220.  846. 2538. 4352.  948. 3826. 3062. 2423.
#> # … with 23 more rows, and 2 more variables: Nov <dbl>, Dez <dbl>

数据

set.seed(123)

# make 1000 dates
date <- sample(seq(as_date('2007/01/01'), as_date('2017/01/01'), by="day"), 1000)

location <- rep(LETTERS[1:3], 1000) # 3 locations
long <- rep(runif(3, -180, -120), 1000) # whith 3 long`s`
lat <- rep(runif(3, 30, 40), 1000) # and with 3 lat`s`
npp <- runif(1000, 200, 350) # make 1000 npp`s`

# make DF with repetition of 3 for each location
df <- data.frame(location,date = rep(date, each =3), long, lat, date, npp)

相关问题