如何在 R 中基于纬度、经度、时间操作数据框?

How to operate a dataframe based on lat, lon, time in R?

我是 R 的新手,有使用栅格和 netCDF 文件的背景,我试图寻找这个问题的答案,但找不到任何东西。

这个数据框有时间和空间变量。时间由 Year 表示,空间位置可以与 ADM2_PCODE 相关,也可以与列 geometry 中的经纬度对构建的多边形相关。我想找到一种方法 select 每个位置至少有 5 年的数据 (Valor != NA)。我想这可以通过 ADM2_PCODEgeometry.

索引

在正常的 netcdf 操作中,我会使用类似 where(sum(Valor != NA).dim('Year')>= 5) 的东西。但是,这里的情况需要使用 table 或向量解决方案,而我没有操作向量的经验。我知道可以将 table 转换为特定分辨率的光栅,但我认为最好通过以 table 格式或矢量形式进行操作来最大程度地减少错误和残差。我想知道是否有人可以帮助我。

dataframe/table 的样子的小例子:

Simple feature collection with 6 features and 3 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -62.8941 ymin: -13.1178 xmax: -61.88647 ymax: -11.82782
CRS:           NA
   Year ADM2_PCODE Valor                       geometry
1 1981    1100015    NA MULTIPOLYGON (((-62.0495 -1...
2 1982    1100015    NA MULTIPOLYGON (((-62.0495 -1...
3 1983    1100015    NA MULTIPOLYGON (((-62.0495 -1...
4 1984    1100015    NA MULTIPOLYGON (((-62.0495 -1...
5 1985    1100015    NA MULTIPOLYGON (((-62.0495 -1...
6 1986    1100015    NA MULTIPOLYGON (((-62.0495 -1...

您是否正在寻找这样的解决方案。我添加了更多数据:

library(dplyr)
df %>%  
  group_by(ADM2_PCODE) %>% 
  count(duration_year = max(Year)-min(Year) & !is.na(Valor))

数据框:

df <- structure(list(Year = c(1981, 1982, 1983, 1984, 1985, 1986, 1981, 
1982, 1983, 1984, 1985, 1986), ADM2_PCODE = c(1100015, 1100015, 
1100015, 1100015, 1100015, 1100015, 1100016, 1100016, 1100016, 
1100016, 1100016, 1100016), Valor = c(NA, NA, NA, NA, NA, NA, 
10, 10, 10, 10, 10, 10), geometry = c("MULTIPOLYGON (((-62.0495 -1...", 
"MULTIPOLYGON (((-62.0495 -1...", "MULTIPOLYGON (((-62.0495 -1...", 
"MULTIPOLYGON (((-62.0495 -1...", "MULTIPOLYGON (((-62.0495 -1...", 
"MULTIPOLYGON (((-62.0495 -1...", "MULTIPOLYGON (((-63.0495 -1...", 
"MULTIPOLYGON (((-63.0495 -1...", "MULTIPOLYGON (((-63.0495 -1...", 
"MULTIPOLYGON (((-63.0495 -1...", "MULTIPOLYGON (((-63.0495 -1...", 
"MULTIPOLYGON (((-63.0495 -1...")), row.names = c(NA, -12L), class = c("tbl_df", 
"tbl", "data.frame"))

输出:

  ADM2_PCODE duration_year     n
       <dbl> <lgl>         <int>
1    1100015 FALSE             6
2    1100016 TRUE              6