目前我在R中有两个向量,一个是一组经度级别(长度为m),另一个是一组纬度级别(长度为n)。我应该将它们组合成一个大小为n x m的矩阵。我知道我可以使用诸如rbind()
或cbind()
之类的东西将它们组合成列,但我需要一个矩阵,其中坐标创建某种nxm网格,正确地表示具有经度和纬度的地图。
答案 0 :(得分:0)
我刚要在上面的评论中写与@ user2554330相同。这是一个例子:
m <- 4
n <- 3
longitude <- runif(m)
latitude <- runif(n)
outer(longitude, latitude, function(x, y) paste(x, ":", y))
outer
的第三个参数是(至少)两个参数的函数。它必须在这两个参数上进行矢量化,并且必须返回相等长度的向量。
但是,如果您正在寻找一种方法来存储点网格和一些相关值,那么expand.grid
可能更适合。这不会给你一个nxm矩阵,而是一个带有nxm行的数据帧,每个行代表一个来自矩阵的条目。然后,您可以向此数据框添加值,最好使用矢量化函数:
m <- 4
n <- 3
longitude <- sort(runif(m, 35, 45))
latitude <- sort(runif(n, 35, 45))
points <- expand.grid(long = longitude, lat = latitude)
points$dist <- geosphere::distHaversine(points, c(40,40))
points
#> long lat dist
#> 1 35.47003 36.08055 589824.8
#> 2 38.80128 36.08055 448775.9
#> 3 42.37399 36.08055 483359.7
#> 4 44.59732 36.08055 593811.2
#> 5 35.47003 39.27063 396699.9
#> 6 38.80128 39.27063 130967.4
#> 7 42.37399 39.27063 219108.9
#> 8 44.59732 39.27063 402352.0
#> 9 35.47003 42.59421 476254.2
#> 10 38.80128 42.59421 305683.5
#> 11 42.37399 42.59421 350418.6
#> 12 44.59732 42.59421 480743.1