首页 > 解决方案 > 通过 shapefile 之间的纬度/经度比较创建数据框

问题描述

我有两个 shapefile/dataframes(我可以轻松地在类型之间进行转换)。一个包含形成边界线的坐标,一个包含代表房屋的一组点的坐标。它们都有包含 long 和 lat 的列,并且在数据帧之间具有匹配的列名。

我想做的是创建第三个数据框,其中包含边界左侧存在的房屋点的子集,而不是右侧。

使用 if 语句来测试给定的房子点是否在数据框的左侧,我尝试了两个版本:

df3 <- if(df1$lat < df2$lat){merge(df1,df2)}

df3 <- if(df1$lat[[i]] < df2$lat[[i]){merge(df1,df2)}

第一个返回 0 个观察值,第二个没有运行,产生错误:找不到对象“我”。建议?

编辑:这是两个数据框的前六行。其中一个有 130 行,另一个有 3000 行(房子点)。

        lat     long                       geometry transaction.id
1 -80.12898 25.79037 LINESTRING (-80.12165 25.98...         145045
2 -80.13958 25.94337 LINESTRING (-80.12165 25.98...         240471
3 -80.19615 25.89209 LINESTRING (-80.12165 25.98...         495368
4 -80.12024 25.83410 LINESTRING (-80.12165 25.98...         129341
5 -80.14139 25.78359 LINESTRING (-80.12165 25.98...         146586
6 -80.12744 25.96239 LINESTRING (-80.12165 25.98...         232505
        lat     long                       geometry
1 -80.12165 25.98020 LINESTRING (-80.12165 25.98...
2 -80.11889 25.97520 LINESTRING (-80.11889 25.97...
3 -80.11876 25.97795 LINESTRING (-80.11876 25.97...
4 -80.11903 25.97236 LINESTRING (-80.11889 25.97...
5 -80.11918 25.96933 LINESTRING (-80.11903 25.97...
6 -80.11930 25.96639 LINESTRING (-80.11918 25.96...

编辑:

v3 <- ifelse(df1$lat < df3$lat, 1, 0) 
df3 <- cbind(df1$lat, df1$long, df1$id, v3)

似乎做得很干净!谢谢@r2evans,但值不正确。我认为这是因为上面列出的第二个日期帧中的 lat 和 long 列是从使用 st_geometry 列出的具有两个 lats 和两个 long 的几何列强制而来的

标签: rshapefile

解决方案


推荐阅读