- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 linestrings
的 shapefile描述了巴西城市之间的联系。我想将这些连接转换为一个社区对象,其中城市的代码设置为行名称,使其与我的数据框兼容:
> head(regic_link)
Simple feature collection with 6 features and 6 fields
Geometry type: LINESTRING
Dimension: XY
Bounding box: xmin: -45.7931 ymin: -21.1472 xmax: -41.3903 ymax: -15.9032
proj4string: +proj=longlat +ellps=GRS80 +no_defs
id origin_code nome_ori dest_code nome_dest dist_km geometry
1 14016 3123304 Dores do Turvo 3165701 Senador Firmino 11.732462 LINESTRING (-43.1884 -20.97...
2 14117 3124708 Estrela do Indaiá 3166600 Serra da Saudade 9.080594 LINESTRING (-45.7878 -19.52...
3 15205 3138658 Lontra 3135357 Japonvar 11.104687 LINESTRING (-44.3029 -15.90...
4 17147 3163300 São José do Divino 3144904 Nova Módica 13.066889 LINESTRING (-41.3903 -18.48...
5 17151 3163409 São José do Goiabal 3121803 Dionísio 12.078370 LINESTRING (-42.7077 -19.92...
6 12463 3102100 Alto Rio Doce 3121506 Desterro do Melo 17.982702 LINESTRING (-43.412 -21.025...
所以行名将被设置为
origin_code
并且邻居将设置为
dest_code
在列表中,反之亦然(最终这将更改为我创建的索引,但这使事情更容易检查)。本质上,我需要
linestring
等效于以下用于多边形的代码:
nb.orig <- poly2nb(as_Spatial(shp), row.names = shp$index)
names(nb.orig) <- attr(nb.orig, "region.id")
nb2INLA("output/nb_orig.graph", nb.orig)
(
shp
是一个由多边形组成的 shapefile,
index
变量同时存在于 shapefile 和数据框中)。
sfnetworks
和
igraph
用于创建邻域对象但无法将索引值附加到行名称的包:
regic_net <- as_sfnetwork(regic_link, directed = F)
net_adj <- as_adjacency_matrix(regic_net, names = T)
nb_net <- mat2listw(net_adj)$neighbours
函数
as_sfnetwork
默认情况下为网络中的每个节点分配一个数字(在边缘数据中,这些是变量“from”和“to”,不能使用 mutate 更改):
> regic_net
# A sfnetwork with 827 nodes and 3786 edges
#
# CRS: NA
#
# An undirected simple graph with 1 component with spatially explicit edges
#
# Edge Data: 3,786 x 7 (active)
# Geometry type: LINESTRING
# Dimension: XY
# Bounding box: xmin: -50.6938 ymin: -22.855 xmax: -39.9496 ymax: -14.2696
from to origin_code nome_ori dest_code nome_dest geometry
<int> <int> <dbl> <chr> <dbl> <chr> <LINESTRING [°]>
1 1 2 3123304 Dores do Turvo 3165701 Senador Firmino (-43.1884 -20.975, -43.18106 -20.97017, -43.17373 -20.96534, -43.16639 -20.9605, …
2 3 4 3163409 São José do Goiab… 3121803 Dionísio (-42.7077 -19.9255, -42.71344 -19.91851, -42.71917 -19.91152, -42.72491 -19.90453…
3 5 6 3167707 Sobrália 3162609 São João do Orien… (-42.0972 -19.2363, -42.1016 -19.2437, -42.106 -19.2511, -42.11039 -19.2585, -42.…
4 5 7 3167707 Sobrália 3168408 Tarumirim (-42.0972 -19.2363, -42.08899 -19.24038, -42.08079 -19.24447, -42.07258 -19.24855…
5 8 9 3115474 Catuti 3141009 Mato Verde (-42.9607 -15.3612, -42.95243 -15.36428, -42.94415 -15.36735, -42.93588 -15.37043…
6 10 11 3130606 Inconfidentes 3108305 Borda da Mata (-46.328 -22.3174, -46.31896 -22.31505, -46.30993 -22.3127, -46.30089 -22.31034, …
# … with 3,780 more rows
#
# Node Data: 827 x 1
# Geometry type: POINT
# Dimension: XY
# Bounding box: xmin: -50.6938 ymin: -22.855 xmax: -39.9496 ymax: -14.2696
geometry
<POINT [°]>
1 (-43.1884 -20.975)
2 (-43.1004 -20.917)
3 (-42.7077 -19.9255)
# … with 824 more rows
然后,这些值在
nb
中的下一步中用作行名称。使用
as_adjacency_matrix
创建的对象和
mat2listw
.有谁知道如何附加我自己的索引,甚至提取已创建的索引,以便我可以使其与数据框保持一致?我试图创建一个转换表,采用
from
/
origin_code
和
to
/
dest_code
但这些不匹配,
from
value 是两个索引中的最低值,因此并不总是我数据中的原点。
最佳答案
我将使用一个只有 5 LINESTRING(s)
的简化示例来展示一个解决方案。 .如果以下代码对应于所需的解决方案,则应该很容易将其转换为实际案例。
首先,定义一些函数并加载相关包:
'%!in%' <- function(x,y) !('%in%'(x,y))
Sys.setenv(`_R_S3_METHOD_REGISTRATION_NOTE_OVERWRITES_` = "false")
suppressPackageStartupMessages({
library(sf)
library(lwgeom)
library(tidygraph)
library(sfnetworks)
})
加载数据并仅选择相关列+仅五行
regic_link <- st_read(
dsn = "city_link/REGIC2018_Ligacoes_entre_Cidades.shp",
query = "SELECT cod_ori, cod_dest FROM REGIC2018_Ligacoes_entre_Cidades LIMIT 5"
)
#> Reading query `SELECT cod_ori, cod_dest FROM REGIC2018_Ligacoes_entre_Cidades LIMIT 5' from data source `C:\Users\Utente\Desktop\city_link\REGIC2018_Ligacoes_entre_Cidades.shp'
#> using driver `ESRI Shapefile'
#> Simple feature collection with 5 features and 2 fields
#> Geometry type: LINESTRING
#> Dimension: XY
#> Bounding box: xmin: -63.0338 ymin: -13.4945 xmax: -60.1348 ymax: -9.912
#> Geodetic CRS: SIRGAS 2000
过滤掉重复的连接
regic_link <- regic_link %>%
filter(paste0(cod_ori, cod_dest) %!in% paste0(cod_dest, cod_ori))
构建 sfnetwork 对象
regic_sfn <- as_sfnetwork(regic_link, directed = FALSE)
提取节点(即这些线的唯一边界点)
regic_nodes <- st_as_sf(regic_sfn, "nodes")
每个节点应对应于 LINESTRINGS 中定义的边界点
regic_link
.正如您所注意到的,我们不能简单地使用 from/to
[1]
下面的符号):
start <- lapply(
X = st_equals(regic_nodes, st_startpoint(regic_link)),
FUN = function(x) regic_link$cod_ori[x[1]]
)
检查输出:
start
#> [[1]]
#> [1] "1100015"
#>
#> [[2]]
#> [1] NA
#>
#> [[3]]
#> [1] NA
#>
#> [[4]]
#> [1] NA
#>
#> [[5]]
#> [1] "1100023"
#>
#> [[6]]
#> [1] NA
#>
#> [[7]]
#> [1] "1100031"
#>
#> [[8]]
#> [1] NA
这意味着第一个节点对应 ID
1100015
,第七个节点
1100031
等等。另一方面,其他节点做
end <- lapply(
X = st_equals(regic_nodes, st_endpoint(regic_link)),
FUN = function(i) regic_link$cod_dest[i[1]]
)
检查输出,它应该与
start
相反。并具有相同的
end
#> [[1]]
#> [1] NA
#>
#> [[2]]
#> [1] "1100049"
#>
#> [[3]]
#> [1] "1100189"
#>
#> [[4]]
#> [1] "1100296"
#>
#> [[5]]
#> [1] NA
#>
#> [[6]]
#> [1] "1100114"
#>
#> [[7]]
#> [1] NA
#>
#> [[8]]
#> [1] "1100304"
合并两个对象。
dplyr::coalescence
用于获取非 NA ID
idxs <- mapply(dplyr::coalesce, start, end)
将新的 id 添加到节点表中:
regic_sfn <- regic_sfn %N>%
mutate(name = idxs)
估计城市间的邻接矩阵
regic_adj <- igraph::as_adjacency_matrix(regic_sfn, names = TRUE)
regic_adj
#> 8 x 8 sparse Matrix of class "dgCMatrix"
#> 1100015 1100049 1100189 1100296 1100023 1100114 1100031 1100304
#> 1100015 . 1 1 1 . . . .
#> 1100049 1 . . . . . . .
#> 1100189 1 . . . . . . .
#> 1100296 1 . . . . . . .
#> 1100023 . . . . . 1 . .
#> 1100114 . . . . 1 . . .
#> 1100031 . . . . . . . 1
#> 1100304 . . . . . . 1 .
如果我们检查第一行,我们会注意到城市与右边匹配
regic_link %>% filter(cod_ori == 1100023)
#> Simple feature collection with 1 feature and 2 fields
#> Geometry type: LINESTRING
#> Dimension: XY
#> Bounding box: xmin: -63.0338 ymin: -10.4323 xmax: -62.4721 ymax: -9.912
#> Geodetic CRS: SIRGAS 2000
#> cod_ori cod_dest geometry
#> 1 1100023 1100114 LINESTRING (-63.0338 -9.912...
另一方面
regic_link %>% filter(cod_ori == 1100049)
#> Simple feature collection with 0 features and 2 fields
#> Bounding box: xmin: NA ymin: NA xmax: NA ymax: NA
#> Geodetic CRS: SIRGAS 2000
#> [1] cod_ori cod_dest geometry
#> <0 rows> (or 0-length row.names)
因为那对应于
cod_dest
之一.
regic_link %>% filter(cod_dest == 1100049)
#> Simple feature collection with 1 feature and 2 fields
#> Geometry type: LINESTRING
#> Dimension: XY
#> Bounding box: xmin: -62.0041 ymin: -11.9342 xmax: -61.4512 ymax: -11.4356
#> Geodetic CRS: SIRGAS 2000
#> cod_ori cod_dest geometry
#> 1 1100015 1100049 LINESTRING (-62.0041 -11.93...
最后,我们可以将 adj 矩阵转换为
inla.graph
对象(但我认为
INLA::inla.read.graph(regic_adj)
#> $n
#> [1] 8
#>
#> $nnbs
#> [1] 3 1 1 1 1 1 1 1
#>
#> $nbs
#> $nbs[[1]]
#> [1] 2 3 4
#>
#> $nbs[[2]]
#> [1] 1
#>
#> $nbs[[3]]
#> [1] 1
#>
#> $nbs[[4]]
#> [1] 1
#>
#> $nbs[[5]]
#> [1] 6
#>
#> $nbs[[6]]
#> [1] 5
#>
#> $nbs[[7]]
#> [1] 8
#>
#> $nbs[[8]]
#> [1] 7
#>
#>
#> $graph.file
#> [1] NA
#>
#> $cc
#> $cc$id
#> [1] 1 1 1 1 2 2 3 3
#>
#> $cc$n
#> [1] 3
#>
#> $cc$nodes
#> $cc$nodes[[1]]
#> [1] 1 2 3 4
#>
#> $cc$nodes[[2]]
#> [1] 5 6
#>
#> $cc$nodes[[3]]
#> [1] 7 8
#>
#>
#>
#> attr(,"class")
#> [1] "inla.graph"
创建于 2021-08-25 由
reprex package (v2.0.0)
LIMIT 5
的完整示例。来自
st_read
中的查询参数.可能有一些更简单的方法,但我现在想不出任何方法。
关于r - 从 sf linestring 对象创建具有正确索引标签的 inla.graph 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68905319/
这是代码片段。 请说出这种用小内存存储大数据的算法是什么。 public static void main(String[] args) { long longValue = 21474836
所以我使用 imap 从 gmail 和 outlook 接收电子邮件。 Gmail 像这样编码 =?UTF-8?B?UmU6IM69zq3OvyDOtc68zrHOuc67IG5ldyBlbWFpb
很久以前就学会了 C 代码;想用 Scheme 尝试一些新的和不同的东西。我正在尝试制作一个接受两个参数并返回两者中较大者的过程,例如 (define (larger x y) (if (> x
Azure 恢复服务保管库有两个备份配置选项 - LRS 与 GRS 这是一个有关 Azure 恢复服务保管库的问题。 当其驻留区域发生故障时,如何处理启用异地冗余的恢复服务保管库?如果未为恢复服务启
说,我有以下实体: @Entity public class A { @Id @GeneratedValue private Long id; @Embedded private
我有下一个问题。 我有下一个标准: criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 如果我的
如果这是任何类型的重复,我会提前申请,但我找不到任何可以解决我的具体问题的内容。 这是我的程序: import java.util.Random; public class CarnivalGame{
我目前正在使用golang创建一个聚合管道,在其中使用“$ or”运算符查询文档。 结果是一堆需要分组的未分组文档,这样我就可以进入下一阶段,找到两个数据集之间的交集。 然后将其用于在单独的集合中进行
是否可以在正则表达式中创建 OR 条件。 我正在尝试查找包含此类模式的文件名列表的匹配项 第一个案例 xxxxx-hello.file 或者案例二 xxxx-hello-unasigned.file
该程序只是在用户输入行数时创建菱形的形状,因此它有 6 个 for 循环; 3 个循环创建第一个三角形,3 个循环创建另一个三角形,通过这 2 个三角形和 6 个循环,我们得到了一个菱形,这是整个程序
我有一个像这样的查询字符串 www.google.com?Department=Education & Finance&Department=Health 我有这些 li 标签,它们的查询字符串是这样
我有一个带有静态构造函数的类,我用它来读取 app.config 值。如何使用不同的配置值对类进行单元测试。我正在考虑在不同的应用程序域中运行每个测试,这样我就可以为每个测试执行静态构造函数 - 但我
我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。 map, int > myContainer; myContainer.insert(make_
我正在为 Web 应用程序创建数据库,并正在寻找一些建议来对可能具有多种类型的单个实体进行建模,每种类型具有不同的属性。 作为示例,假设我想为“数据源”对象创建一个关系模型。所有数据源都会有一些共享属
(1) =>CREATE TABLE T1(id BIGSERIAL PRIMARY KEY, name TEXT); CREATE TABLE (2) =>INSERT INTO T1 (name)
我不确定在使用别名时如何解决不明确的列引用。 假设有两个表,a 和 b,它们都有一个 name 列。如果我加入这两个表并为结果添加别名,我不知道如何为这两个表引用 name 列。我已经尝试了一些变体,
我的查询是: select * from table where id IN (1,5,4,3,2) 我想要的与这个顺序完全相同,不是从1...5,而是从1,5,4,3,2。我怎样才能做到这一点? 最
我正在使用 C# 代码执行动态生成的 MySQL 查询。抛出异常: CREATE TABLE dump ("@employee_OID" VARCHAR(50)); "{"You have an er
我有日期 2016-03-30T23:59:59.000000+0000。我可以知道它的格式是什么吗?因为如果我使用 yyyy-MM-dd'T'HH:mm:ss.SSS,它会抛出异常 最佳答案 Sim
我有一个示例模式,它的 SQL Fiddle 如下: http://sqlfiddle.com/#!2/6816b/2 这个 fiddle 只是根据 where 子句中的条件查询示例数据库,如下所示:
我是一名优秀的程序员,十分优秀!