【问题标题】:How to combine two vectors into pairs with separator如何使用分隔符将两个向量组合成对
【发布时间】:2019-05-15 13:50:50
【问题描述】:

我希望我在这里使用了正确的术语。

我有两个向量,

 i_25_points <- 130:134
 j_25_points <- 65:69

我想将它们组合成对,几乎就像一个矩阵,然后将它们折叠成一个如下所示的字符串

 130;65|130;66|130;67....134;65|134;66|134;67|134;68|134;69

如何结合?我最初的想法是通过嵌套 for 循环并将它们附加在一起来创建对。

但必须有更巧妙的方法来做到这一点。

【问题讨论】:

  • @Sotos 真棒,做到了。
  • @Sotos 我刚开始回答问题;是否有理由不将其作为答案而不是评论,以便可以接受?从字面上看,这是一个了解人们如何与 SO 互动的问题。
  • @Benjamin 我将其添加为答案。我首先在评论部分写它的原因是因为我正在寻找一个重复的问题。一旦找不到,我将其添加为答案
  • 啊哈!谢谢@Sotos!

标签: r vector paste


【解决方案1】:

您可以使用outer 来创建所有可能的配对,只需paste,即

paste(outer(x, y, paste, sep = ';'), collapse = '|')

【讨论】:

    【解决方案2】:

    expand.grid 和 paste 的选项

    i_25_points <- 130:134
    j_25_points <- 65:69
    x <- expand.grid(j_25_points ,j_25_points )
    paste(x[,1], x[,2], sep = ";", collapse = "|")
    

    【讨论】:

      【解决方案3】:

      reppaste 的选项

      paste(rep(i_25_points, each = length(j_25_points)),
            rep(j_25_points, length(i_25_points)), sep=";", collapse="|")
      #[1] "130;65|130;66|130;67|130;68|130;69|131;65|131;66|131;67|131;68|131;69|132;65|132;66|132;67|132;68|132;69|133;65|133;66|133;67|133;68|133;69|134;65|134;66|134;67|134;68|134;69"
      

      或者使用tidyverse

      library(tidyverse)
      crossing(i_25_points, j_25_points) %>% 
         unite(newCol, i_25_points, j_25_points, sep=":") %>% 
         summarise(newCol = str_c(newCol, collapse="|")) %>%
         pull(newCol)
      

      数据

      i_25_points <- c(130, 131, 132, 133, 134)
      j_25_points <- 65:69
      

      【讨论】:

        猜你喜欢
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 2013-09-04
        • 1970-01-01
        相关资源
        最近更新 更多