【问题标题】:Adding value after every nth element of vector in R在R中向量的每个第n个元素之后添加值
【发布时间】:2016-05-29 19:18:25
【问题描述】:

关于如何提取向量的每个第 n 个元素有很多问题,但我找不到如何在向量的每个第 n 个元素之后轻松添加一个值。有没有一种简单的方法可以在向量中的每个第 n 个元素之后添加某个值?

例如,假设我们有两个向量:

v1 <- paste0(letters[1:3], rep(1:5, each = 3))
> v1
[1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3" "a4" "b4" "c4" "a5" "b5" "c5"

v2 <- paste0("header", seq(1:5))
> v2
[1] "header1" "header2" "header3" "header4" "header5"

现在我想在v1 的每三个元素之后添加v2 的元素,从第一个开始。结果应如下所示:

 [1] "header1" "a1" "b1" "c1" "header2" "a2" "b2" "c2" "header3" "a3" "b3" "c3" "header4" "a4" "b4" "c4" "header5" "a5" "b5" "c5"

【问题讨论】:

    标签: r vector


    【解决方案1】:

    您可以将长向量制成具有适当尺寸的矩阵;将标题放在顶部;然后使用c() 将矩阵展平为向量。

    构造示例:

    v1 <- paste0(letters[1:3], rep(1:5, each = 3))
    v2 <- paste0("header", seq(1:5))
    

    制作矩阵并附上标题:

    r <- rbind(v2,matrix(v1,ncol=length(v2)))
    ## "header1" "header2" "header3" "header4" "header5"
    ##    "a1"      "a2"      "a3"      "a4"      "a5"     
    ##    "b1"      "b2"      "b3"      "b4"      "b5"     
    ##    "c1"      "c2"      "c3"      "c4"      "c5"     
    

    现在将其展平:

    c(r)
    

    【讨论】:

      【解决方案2】:

      我们可以split 'v1' 使用分组变量(使用%/% 创建)形成一个list ,然后使用list 连接(c)'v2' 的相应元素Mapunlist 它。

      unlist(Map(`c`, v2, split(v1, (seq_along(v1)-1)%/%3+1)), use.names=FALSE)
      #[1] "header1" "a1"      "b1"      "c1"      "header2" "a2"      "b2"     
      #[8] "c2"      "header3" "a3"      "b3"      "c3"      "header4" "a4"     
      #[15] "b4"      "c4"      "header5" "a5"      "b5"      "c5"  
      

      或者如果'v1'的长度是'3'的倍数,我们可以用'v1'创建matrixcbind'v2',转置输出并将matrix转换为@987654332 @ 与c

      c(t(cbind(v2,matrix(v1, ncol=3, byrow=TRUE))))
      

      【讨论】:

        猜你喜欢
        • 2022-07-20
        • 2012-11-08
        • 2021-10-19
        • 2011-07-11
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 2012-09-06
        相关资源
        最近更新 更多