用两个分隔符连接矩阵行

Concatenate rows of matrix with two separators

我的目标是将坐标对矩阵转换为单个字符串,并将坐标对粘贴在一起。例如,我有一行字符串的坐标:

 mat <- routes@lines[[9]]@Lines[[1]]@coords
 mat
          [,1]    [,2]
[1,] -122.4491 37.7698
[2,] -122.4519 37.7694
[3,] -122.4491 37.7698

我想将其转换为:

"-122.4491,37.7698;-122.4519,37.7694;-122.4491,37.7698"

其中一对的纬度和经度以逗号分隔,成对以分号分隔。

apply(format(mat), 1, paste, sep=";", collapse = "") 

没有产生所需的输出。如何在 R 中做到这一点?

示例数据如下:

dput(mat)
structure(c(-122.4491, -122.4519, -122.4491, 37.7698, 37.7694, 
37.7698), .Dim = c(3L, 2L))
mat <- structure(c(-122.4491, -122.4519, -122.4491, 37.7698, 37.7694, 37.7698), .Dim = c(3L, 2L))

你很接近。你使用apply是合适的,但是因为你是先操作row-wise,所以你需要先担心一个定界问题:

apply(mat, 1, paste, collapse=",")
# [1] "-122.4491,37.7698" "-122.4519,37.7694" "-122.4491,37.7698"

... 然后将所有这些与一个外部 paste:

结合起来
paste(apply(mat, 1, paste, collapse=","), collapse=";")
# [1] "-122.4491,37.7698;-122.4519,37.7694;-122.4491,37.7698"

另一种选择是转换为 data.frame 然后使用 do.call

do.call(paste, c(as.data.frame(mat), collapse=";", sep=","))
#[1] "-122.4491,37.7698;-122.4519,37.7694;-122.4491,37.7698"
mat <- structure(c(-122.4491, -122.4519, -122.4491, 37.7698, 37.7694, 37.7698), .Dim = c(3L, 2L))

这是一个矩阵,有两列坐标。一键粘贴即可。

paste(mat[,1], mat[,2], sep = ",", collapse = ";")
# [1] "-122.4491,37.7698;-122.4519,37.7694;-122.4491,37.7698"

这里sep设置lat和long坐标之间的分隔符(同一行的单元格),collapse设置坐标对之间的分隔符(不同行之间的分隔符)。