【问题标题】:Concatenate rows of matrix with two separators用两个分隔符连接矩阵的行
【发布时间】:2018-03-05 06:02:35
【问题描述】:

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

 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"

其中单对的 lat 和 lon 用逗号分隔,对用分号分隔。

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))

【问题讨论】:

  • the_darkside,这个问题解决了吗?如果是这样,请接受以下众多答案之一(鉴于您的问题,我建议 Dan Hall 是最直接的。)

标签: r matrix apply paste sp


【解决方案1】:
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 设置经纬度坐标之间的分隔符(同一行中的单元格),collapse 设置坐标对之间的分隔符(不同行之间的分隔符)。

【讨论】:

    【解决方案2】:
    mat <- structure(c(-122.4491, -122.4519, -122.4491, 37.7698, 37.7694, 37.7698), .Dim = c(3L, 2L))
    

    你很亲密。您对apply 的使用是合适的,但是由于您是按行操作的,因此您需要先担心一个分隔:

    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"
    

    【讨论】:

    • 您可以将列粘贴在一起。 sep="," 将设置列间分隔符,collapse=";" 将设置行间分隔符。无需应用或多次调用粘贴。
    • 好奇投反对票的人,有什么原因吗? Downvotes 就像“手指”,在没有建议或 cmets 的情况下匿名给予他们有点弱。
    【解决方案3】:

    另一种选择是转换为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"
    

    【讨论】:

    • 这会产生三个以逗号分隔的字符串,而不是以分号分隔的逗号分隔的纬度/经度对。我认为您需要添加collapse=";"
    • @r2evans 我在看你的apply(mat, 1, paste, collapse=",")。如果第二个是正确的,则将其更改为collapse
    • 哦,好吧...我用它作为演示,构建过程。我应该更清楚。谢谢。
    • do.call(paste, c(as.data.frame(mat), collapse=";",sep=","))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    相关资源
    最近更新 更多