从R

时间:2018-04-29 15:39:41

标签: r matrix

目前我在R中有两个向量,一个是一组经度级别(长度为m),另一个是一组纬度级别(长度为n)。我应该将它们组合成一个大小为n x m的矩阵。我知道我可以使用诸如rbind()cbind()之类的东西将它们组合成列,但我需要一个矩阵,其中坐标创建某种nxm网格,正确地表示具有经度和纬度的地图。

1 个答案:

答案 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