我有一个很大的 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))
我们可以使用
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