过滤和更新点几何

问题描述 投票:0回答:1

我有一个很大的 sf 点数据集。对于以 000 结尾的任何 x 或 y 坐标,我想从中随机添加或减去 1(这是与多个网格几何相交的单个点的顶部停止)。有没有一种方法可以直接过滤和编辑几何图形来实现这一点?

library(dplyr)
library(sf)
         
Data <- tibble(
    id=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312","A00472"),
    x=c(465000,455248,442525,445248,470825,460855,450433,474000,474000,488000),
    y=c(154897,284740,123000,123125,136000,175001,136600,150070,150070,176000))

sf <- st_as_sf(Data, coords = c("x","y"), crs=27700, na.fail=FALSE)

所需的输出看起来像这样:

Output <- tibble(
    id=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312","A00472"),
    x=c(465001,455248,442525,445248,470825,460855,450433,474001,473999,488001),
    y=c(154897,284740,122999,123125,136001,175001,136600,150070,150070,175999))
r dplyr spatial point sf
1个回答
1
投票

我们可以使用

st_coordinates()
包中的
sf
函数来提取每个点的坐标:

library(dplyr)
library(sf)

sf %>% 
  st_set_geometry(NULL) %>% 
  as.data.frame() %>% 
  mutate(x = st_coordinates(sf)[, 1],
         y = st_coordinates(sf)[, 2])
     id      x      y
1  A00111 465000 154897
2  A00112 455248 284740
3  A00113 442525 123000
4  A00211 445248 123125
5  A00212 470825 136000
6  A00213 460855 175001
7  A00214 450433 136600
8  A00311 474000 150070
9  A00312 474000 150070
10 A00472 488000 176000
© www.soinside.com 2019 - 2024. All rights reserved.