r - 通过 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 的几何列强制而来的
解决方案
推荐阅读
- sympy - 为什么 sympy 的 subs 函数有时不能替换符号的值?
- spring - 如果实体模型有关系但数据库中的数据(视图)没有关系并且它们不一致会发生什么?
- vba - 从一个 Word 文档中选择部分文本并复制到另一个 Word 文档中
- r - R - 合并城市名称以近似经纬度坐标
- go - 有没有办法优化该代码?Go中的TCP服务器
- testing - 登录到应用程序后的 TestCafe 测试引发错误 401 未经授权
- ruby-on-rails - Rails 路由到未知页面与 ActiveStorage 图像路径混淆
- java - Travis CI - Travis(401 和 400)测试失败,但在本地运行 Java Spring Boot
- apache - Can't Apache2 start errr: 找不到 SOAP/Transport/HTTP.pm
- javascript - 加载文档时,如何阻止 Safari 将注意力集中在标有用户名或密码的表单字段上?