我尝试使用 R 中的 sf 包来查看 sf 对象是否在另一个 sf 对象内st_within
功能。我的问题是这个函数的输出是稀疏几何二进制谓词 -sgbp
我需要一个向量作为输出,以便我可以使用dplyr
之后打包进行过滤。这是一个简化的示例:
# object 1: I will test if it is inside object 2
df <- data.frame(lon = c(2.5, 3, 3.5), lat = c(2.5, 3, 3.5), var = 1) %>%
st_as_sf(coords = c("lon", "lat"), dim = "XY") %>% st_set_crs(4326) %>%
summarise(var = sum(var), do_union = F) %>% st_cast("LINESTRING")
# object 2: I will test if it contains object 1
box <- data.frame(lon = c(2, 4, 4, 2, 2), lat = c(2, 2, 4, 4,2), var = 1) %>%
st_as_sf(coords = c("lon", "lat"), dim = "XY") %>% st_set_crs(4326) %>%
summarise(var = sum(var), do_union = F) %>% st_cast("POLYGON")
# test 1
df$indicator <- st_within(df$geometry, box$geometry) # gives geometric binary predicate on pairs of sf sets which cannot be used
df <- df %>% filter(indicator == 1)
这给出了错误:列indicator
必须是一维原子向量或列表。
我尝试在下面解决这个问题:
# test 2
df$indicator <- st_within(df$geometry, box$geometry, sparse = F) %>%
diag() # gives matrix that I convert with diag() into vector
df <- df %>% filter(indicator == FALSE)
这是有效的,它删除了包含 TRUE 值的行,但制作矩阵的过程对于我的计算来说非常慢,因为我的真实数据包含许多观察结果。有没有办法让输出st_within
字符向量,或者可能是一种转换方法sgbp
到兼容的字符向量dplyr
不做矩阵?