R:将纬度和经度划分为网格部分

统计女巫

我有纬度和经度点:

> d1 <- data.frame(lat, lon)
> head(d1)
       lat       lon
1 43.25724 -96.01955
2 43.25724 -95.98172
3 43.25724 -95.92336
4 43.25616 -96.40973
5 43.25616 -96.25733
6 43.25616 -96.17735

其中有 413 个。我想(说同一件事的两种方式):

  • 根据纬度和经度将它们分成 9 组(排列在网格中)。

  • 在 lat 与 lon 的图上绘制像井字棋盘一样的网格线,并根据它们落入的网格单元将点划分成箱(分层)。

如果我想只是划分纬度分为9组,我可以使用的cut功能是这样,但我基本上是在寻找的二维版本cut

编辑:

使用建议:我如何绘制这个?

paste(cut(lat, 3, labels=FALSE), cut(lon, 3, labels=FALSE))
  [1] "3 3" "3 3" "3 3" "3 1" "3 2" "3 2" "3 3" "3 3" "3 2" "3 1" "3 2" "3 1" "3 2"
 [14] "3 3" "3 3" "3 1" "3 3" "3 2" "3 2" "3 2" "3 1" "3 3" "3 1" "3 1" "3 3" "3 2"
 [27] "3 2" "3 2" "3 1" "3 2" "3 1" "3 3" "3 1" "3 3" "3 1" "3 2" "3 3" "3 2" "3 2"
 [40] "3 3" "3 3" "3 2" "3 2" "3 2" "3 3" "3 1" "3 3" "3 3" "3 3" "3 2" "3 3" "3 3"
 [53] "3 2" "3 2" "3 3" "3 3" "3 1" "3 2" "3 1" "3 2" "3 2" "3 2" "3 3" "3 2" "3 3"
 [66] "3 3" "3 3" "3 3" "3 3" "3 3" "3 3" "3 1" "3 2" "3 3" "3 1" "3 1" "3 1" "3 1"
 [79] "3 2" "3 2" "3 2" "3 1" "3 3" "3 2" "3 2" "3 2" "3 3" "3 3" "3 1" "3 3" "3 1"
 [92] "3 3" "3 3" "3 1" "3 3" "3 1" "3 3" "3 1" "3 2" "3 3" "3 3" "3 2" "3 2" "3 1"
[105] "3 1" "3 3" "3 2" "3 2" "3 3" "3 3" "3 3" "3 2" "3 1" "3 1" "3 2" "3 2" "3 2"
[118] "3 1" "3 1" "3 2" "3 3" "3 2" "3 2" "3 3" "3 2" "3 1" "3 3" "3 3" "3 1" "3 3"
[131] "3 1" "3 1" "3 3" "2 2" "2 2" "2 1" "2 1" "2 2" "2 3" "2 1" "2 2" "2 2" "2 3"
[144] "2 1" "2 2" "2 3" "2 3" "2 2" "2 3" "2 3" "2 2" "2 2" "2 3" "2 2" "2 1" "2 2"
[157] "2 2" "2 3" "2 3" "2 1" "2 1" "2 2" "2 1" "2 1" "2 1" "2 3" "2 2" "2 3" "2 3"
[170] "2 3" "2 2" "2 3" "2 3" "2 2" "2 1" "2 1" "2 1" "2 2" "2 2" "2 2" "2 2" "2 2"
[183] "2 3" "2 1" "2 2" "2 2" "2 3" "2 3" "2 2" "2 2" "2 3" "2 2" "2 2" "2 2" "2 1"
[196] "2 3" "2 1" "2 2" "2 3" "2 3" "2 1" "2 3" "2 3" "2 1" "2 2" "2 1" "2 2" "2 3"
[209] "2 1" "2 3" "2 2" "2 2" "2 2" "2 3" "2 2" "2 1" "2 2" "2 2" "2 3" "2 3" "2 3"
[222] "2 2" "2 3" "2 2" "2 1" "2 1" "2 2" "2 2" "2 3" "2 2" "2 3" "2 2" "2 2" "2 1"
[235] "2 2" "2 2" "2 3" "2 2" "2 3" "2 3" "2 3" "2 3" "2 1" "2 1" "2 2" "2 2" "2 3"
[248] "2 1" "2 2" "2 3" "2 2" "2 3" "2 3" "2 1" "2 1" "2 3" "2 3" "2 1" "2 3" "2 1"
[261] "2 1" "2 1" "2 3" "2 1" "2 2" "2 2" "2 2" "2 3" "2 3" "2 1" "2 1" "2 2" "2 3"
[274] "2 3" "2 2" "2 2" "2 1" "1 2" "1 2" "1 3" "1 3" "1 1" "1 1" "1 2" "1 2" "1 2"
[287] "1 2" "1 1" "1 3" "1 3" "1 2" "1 1" "1 1" "1 1" "1 2" "1 1" "1 1" "1 3" "1 2"
[300] "1 2" "1 2" "1 3" "1 1" "1 3" "1 1" "1 3" "1 2" "1 1" "1 2" "1 2" "1 2" "1 1"
[313] "1 3" "1 1" "1 1" "1 2" "1 3" "1 1" "1 2" "1 1" "1 2" "1 1" "1 3" "1 2" "1 2"
[326] "1 1" "1 2" "1 3" "1 3" "1 1" "1 2" "1 3" "1 3" "1 1" "1 3" "1 3" "1 1" "1 2"
[339] "1 2" "1 2" "1 3" "1 1" "1 2" "1 3" "1 2" "1 3" "1 3" "1 1" "1 2" "1 2" "1 1"
[352] "1 1" "1 2" "1 2" "1 3" "1 3" "1 1" "1 2" "1 2" "1 3" "1 1" "1 2" "1 2" "1 3"
[365] "1 1" "1 2" "1 1" "1 3" "1 3" "1 1" "1 1" "1 2" "1 2" "1 3" "1 1" "1 3" "1 1"
[378] "1 3" "1 3" "1 1" "1 1" "1 2" "1 3" "1 2" "1 1" "1 2" "1 3" "1 3" "1 2" "1 2"
[391] "1 3" "1 1" "1 2" "1 2" "1 3" "1 2" "1 2" "1 3" "1 1" "1 3" "1 1" "1 2" "1 2"
[404] "1 2" "1 1" "1 3" "1 1" "1 2" "1 1" "1 1" "1 1" "1 3" "1 1"
> 

问题是纬度和经度必须在同一个网格部分。我可能是错的,但它看起来不像这里发生的那样。

编辑 2:出了点问题......得到 NAs。

> df2 <- data.frame(lat, lon)
> df2 <- within(df2, {
+   grp.lat = cut(lat, (0:3)/3, labels = FALSE)
+   grp.lon = cut(lon, (0:3)/3, labels = FALSE)
+ })
> head(df2)
       lat       lon grp.lon grp.lat
1 43.25724 -96.01955      NA      NA
2 43.25724 -95.98172      NA      NA
3 43.25724 -95.92336      NA      NA
4 43.25616 -96.40973      NA      NA
5 43.25616 -96.25733      NA      NA
6 43.25616 -96.17735      NA      NA

最终解决方案:

#Divide the dataset into equally-sized chunks, as evenly as possible, for 9 chunks (coarse)

df2 <- data.frame(lat, lon)
df2 <- within(df2, {
  grp.lat = cut(lat, 3, labels = FALSE)
  grp.lon = cut(lon, 3, labels = FALSE)
})
head(df2)

#Want the minimum lon value for which grp.lon = 1 and the maximum lon value for which grp.lon=1

start_grp1_lon <- min(df2$lon[df2$grp.lon==1])
start_grp2_lon <- min(df2$lon[df2$grp.lon==2])
start_grp3_lon <- min(df2$lon[df2$grp.lon==3])

start_grp1_lat <- min(df2$lat[df2$grp.lat==1])
start_grp2_lat <- min(df2$lat[df2$grp.lat==2])
start_grp3_lat <- min(df2$lat[df2$grp.lat==3])

plot(lat ~ lon, data = df2, pch = (15:23)[grp.lon*grp.lat], col=[grp.lon]) #pch = (15:17)[grp.lon], col = grp.lat)
abline(v = c(start_grp1_lon, start_grp2_lon, start_grp3_lon))
abline(h = c(start_grp1_lat, start_grp2_lat, start_grp3_lat))
r2evans

一种方法是cut在每个轴上使用

set.seed(2)
n <- 50
df <- data.frame(x = runif(n), y = runif(n))
head(df)
#           x           y
# 1 0.1848823 0.007109038
# 2 0.7023740 0.014693911
# 3 0.5733263 0.683403423
# 4 0.1680519 0.929720222
# 5 0.9438393 0.275401199
# 6 0.9434750 0.811859695

现在分配 bin,任意生成一个 3x3 网格:

df <- within(df, {
  grp.x = cut(x, (0:3)/3, labels = FALSE)
  grp.y = cut(y, (0:3)/3, labels = FALSE)
})
head(df)
#           x           y grp.y grp.x
# 1 0.1848823 0.007109038     1     1
# 2 0.7023740 0.014693911     1     3
# 3 0.5733263 0.683403423     3     2
# 4 0.1680519 0.929720222     3     1
# 5 0.9438393 0.275401199     1     3
# 6 0.9434750 0.811859695     3     3

现在这些可以用于分组、着色等。这里的图形只是为了演示,但表示通过颜色(Y 轴)和形状(X 轴),可以将点作为一个组进行处理。

在此处输入图片说明

plot(y ~ x, data = df, pch = (15:17)[grp.x], col = grp.y)
abline(v = (1:2)/3)
abline(h = (1:2)/3)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular ngFor 和将表格划分为标题部分

来自分类Dev

将边界框/范围划分为R中的几个部分

来自分类Dev

使用python将经度和纬度转换为x和y网格系统

来自分类Dev

matlab:按纬度/经度将小数组拆分为一个大数组的各个网格单元

来自分类Dev

将Matlab图划分为网格

来自分类Dev

将纬度和经度值转换为自定义大小的网格

来自分类Dev

将String转换为经度和纬度

来自分类Dev

将经度和纬度转换为度

来自分类Dev

将String转换为经度和纬度

来自分类Dev

将子元素划分为子部分

来自分类Dev

将行划分为不同的部分

来自分类Dev

将Excel图表划分为几个部分

来自分类Dev

将图像划分为可点击的部分

来自分类Dev

将信号划分为图表上的部分

来自分类Dev

R中的纬度和经度坐标

来自分类Dev

将地理区域划分为大小相等的网格,并返回每个像元的左上和右下

来自分类Dev

纬度和经度问题

来自分类Dev

比较纬度和经度

来自分类Dev

将 X 和 Y 转换为纬度和经度

来自分类Dev

将纬度和经度传递给我的地图脚本

来自分类Dev

将经度和纬度转换为ECEF坐标系

来自分类Dev

将MapKit纬度和经度转换为DMS格式

来自分类Dev

将点(纬度和经度)绘制到ggmap中

来自分类Dev

将X,Y像素转换为经度和纬度

来自分类Dev

将纬度和经度传递给我的地图脚本

来自分类Dev

c#:将地址转换为经度和纬度

来自分类Dev

Java地理编码-将经度和纬度转换为地址

来自分类Dev

将getLastLocation()结果转换为单独的纬度和经度

来自分类Dev

如何将航点转换成经度和纬度?