如何在 R 中基于纬度、经度、时间操作数据框?
How to operate a dataframe based on lat, lon, time in R?
我是 R 的新手,有使用栅格和 netCDF 文件的背景,我试图寻找这个问题的答案,但找不到任何东西。
这个数据框有时间和空间变量。时间由 Year
表示,空间位置可以与 ADM2_PCODE
相关,也可以与列 geometry
中的经纬度对构建的多边形相关。我想找到一种方法 select 每个位置至少有 5 年的数据 (Valor != NA
)。我想这可以通过 ADM2_PCODE
或 geometry
.
索引
在正常的 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
我是 R 的新手,有使用栅格和 netCDF 文件的背景,我试图寻找这个问题的答案,但找不到任何东西。
这个数据框有时间和空间变量。时间由 Year
表示,空间位置可以与 ADM2_PCODE
相关,也可以与列 geometry
中的经纬度对构建的多边形相关。我想找到一种方法 select 每个位置至少有 5 年的数据 (Valor != NA
)。我想这可以通过 ADM2_PCODE
或 geometry
.
在正常的 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