我想在library(tidyverse)
new_df <- df %>%
rownames_to_column(var = "row_name") %>%
separate(row_name,sep = "_",into = c("name","year")) %>%
mutate(year = year %>% str_remove(".txt"))
new_df %>% as_tibble()
# A tibble: 12 x 13
name year abs access allow analysis application approach base big business challenge company
<chr> <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 Adidas 2010 13 25 26 11 41 132 1 266 13 115 1
2 Adidas 2011 1 3 1 0 0 8 0 11 2 10 0
3 Adidas 2012 29 35 37 22 110 181 7 384 31 136 3
4 Adidas 2013 28 47 38 32 180 184 4 451 30 129 3
5 Adidas 2014 12 42 38 27 159 207 6 921 32 128 6
6 Adidas 2016 30 47 50 47 162 251 9 1061 32 171 13
7 Nike 2009 16 15 17 12 33 177 9 346 93 196 1
8 Nike 2011 10 30 0 3 0 0 0 81 7 31 0
9 Nike 2012 21 22 12 57 199 300 7 214 11 107 3
10 Nike 2013 20 32 30 11 123 321 4 331 90 239 3
11 Nike 2014 33 43 30 33 119 137 6 441 67 318 6
12 Nike 2015 51 42 41 27 102 151 9 1061 32 221 13
中复制区域的空间依赖性图,而不是在R中使用基本的ggplot2
我在下面的代码中提供了可重现的示例:
我遵循了示例:Plotting neighborhoods network to a ggplot maps
plot
我在问如何使用library(leaflet)
library(ggplot2)
library(sf)
library(spdep)
URL <- "https://biogeo.ucdavis.edu/data/gadm3.6/Rsp/gadm36_CZE_1_sp.rds"
data <- readRDS(url(URL))
ggplot() +
geom_polygon(data = data, aes(x=long, y = lat, group = group), color = "black", fill = F)
cns <- knearneigh(coordinates(data), k = 3, longlat=T)
scnsn <- knn2nb(cns, row.names = NULL, sym = T)
cns
scnsn
cS <- nb2listw(scnsn)
summary(cS)
# Plot of regions and k-nn neighthorhours matrix
plot(data)
plot(cS, coordinates(data), add = T)
复制Plot of regions and k-nn neighthorhours matrix
。
我知道我们必须检索每个点输入,然后使用ggplot
,但是我不知道如何从cS对象中检索它。
答案 0 :(得分:3)
您要引用的另一篇SO帖子包含获取情节所需遵循的所有步骤(由于@StupidWolf给出了很好的答案)。
基本上,您需要使用以下方法提取不同的细分:
1)转换数据框中的数据坐标,这将便于以后使用:
data_df <- data.frame(coordinates(data))
colnames(data_df) <- c("long", "lat")
此data_df现在包含用于绘制点的所有x,y值。
2)现在,我们可以使用以下方法从cS
对象中获取细分信息:
n = length(attributes(cS$neighbours)$region.id)
DA = data.frame(
from = rep(1:n,sapply(cS$neighbours,length)),
to = unlist(cS$neighbours),
weight = unlist(cS$weights)
)
DA = cbind(DA, data_df[DA$from,], data_df[DA$to,])
colnames(DA)[4:7] = c("long","lat","long_to","lat_to")
在DA
数据框中,您具有绘制每个分段所需的所有信息
3)最后,您可以绘制每个部分的图:
ggplot(data, aes(x = long, y =lat))+
geom_polygon(aes(group = group), color = "black", fill = FALSE)+
geom_point(data = data_df, aes(x= long, y = lat), size = 1)+
geom_segment(data = DA, aes(xend = long_to, yend = lat_to), size=0.5)
同样,@ StupidWolf提供的解决方案写得很好并且易于理解,所以我不知道为什么您无法复制它。