如何合并含经纬度且分辨率相同的两个DataFrame?
空间网格DataFrame合并问题
我有两个DataFrame(df_1 和 df_2),各自包含一个变量(var1 和 var2)。二者均为全球地图数据,拥有相同的CRS和空间分辨率(0.083精度的全球网格),对应变量的可视化效果分别为Var1、Var2。说明:我使用terra包,从不同空间分辨率和范围的NetCDF文件生成了这两个DataFrame。
我需要将两个变量合并到同一个DataFrame中进行分析,但尝试基于经纬度(lon、lat列)合并时,返回的var2列全为NA。我已尝试以下方法:
- 使用
dplyr的left_join:
> df <- df_1 %>% + left_join(df_2, by = c("lon", "lat")) > summary(df) lon lat var1 var2 Min. :-179.96 Min. :-55.458 Min. : 0.000 Min. : NA 1st Qu.: -63.04 1st Qu.: 8.208 1st Qu.: 9.398 1st Qu.: NA Median : 31.21 Median : 37.791 Median :15.052 Median : NA Mean : 20.81 Mean : 30.864 Mean :16.223 Mean :NaN 3rd Qu.: 93.12 3rd Qu.: 56.791 3rd Qu.:21.898 3rd Qu.: NA Max. : 179.96 Max. : 83.041 Max. :62.238 Max. : NA NA's :2075418
- 转换为
sf对象后使用st_join:
> sf_1 <- st_as_sf(df_1, + coords = c("lon", "lat"), + crs = 4326) > sf_2 <- st_as_sf(df_2, + coords = c("lon", "lat"), + crs = 4326) > df_spatialjoin <- st_join(sf_1, sf_2) > summary(df_spatialjoin) var1 var2 geometry Min. : 0.000 Min. : NA POINT :2075418 1st Qu.: 9.398 1st Qu.: NA epsg:4326 : 0 Median :15.052 Median : NA +proj=long...: 0 Mean :16.223 Mean :NaN 3rd Qu.:21.898 3rd Qu.: NA Max. :62.238 Max. : NA NA's :2075418
- 将
sf转回tibble后使用dplyr的left_join:
> df_join <- left_join(as_tibble(sf_1), + as_tibble(sf_2), + by = "geometry") > summary(df_join) var1 geometry var2 Min. : 0.000 POINT :2075418 Min. : NA 1st Qu.: 9.398 epsg:4326 : 0 1st Qu.: NA Median :15.052 +proj=long...: 0 Median : NA Mean :16.223 Mean :NaN 3rd Qu.:21.898 3rd Qu.: NA Max. :62.238 Max. : NA NA's :2075418
我还尝试了fuzzyjoin包的geo_join,但同样无效。之前遇到类似问题时我用cbind()解决,但此次两个DataFrame行数不同,无法使用该方法。
内容的提问来源于stack exchange,提问作者Francesco Giardina
相关产品推荐
相关产品推荐

