【问题标题】:Swap rows, per two rows每两行交换行
【发布时间】:2018-03-08 03:34:04
【问题描述】:

是否可以将相邻的两行相互交换,然后移动到接下来的两行,并将它们各自的行交换在一起?即将第 1 行中的 col1 值与第 2 行中的 col 1 值交换;将第 87 行中的 col 1700 值与第 88 行中的 col 1700 值交换。

样本数据:

     col1  col2
row1 a      b
row2 b      b
row3 c      a
row4 d      c

我的真实数据有很多行和列,每次循环时数据都会发生变化,所以我需要一种不引用特定列名和行名的方法。

想要的结果如下所示:

    col1  col2
row1 b      b
row2 a      b
row3 d      c
row4 c      a

【问题讨论】:

    标签: r swap


    【解决方案1】:

    2个一组的第一行加1,2个一组的第二行减一个:

    dat[seq_len(nrow(dat)) + c(1,-1),]
    #     col1 col2
    #row2    b    b
    #row1    a    b
    #row4    d    c
    #row3    c    a
    

    这是因为 R 中的矢量回收:

    1:10 + c(1,-1)
    #[1]  2  1  4  3  6  5  8  7 10  9
    

    【讨论】:

      【解决方案2】:

      另一种方法是创建两个序列,一个用于奇数,另一个用于偶数,并交替组合它们,然后将它们用作行索引。

      df[c(rbind(seq(2, nrow(df), 2), seq(1, nrow(df), 2))),]
      
      #     col1 col2
      #row2    b    b
      #row1    a    b
      #row4    d    c
      #row3    c    a
      

      在哪里

      seq(2, nrow(df), 2)
      #[1] 2 4
      

      生成偶数序列和

      seq(1, nrow(df), 2)
      #[1] 1 3
      

      生成奇数序列。

      然后我们使用rbindc 从两个向量中交替选择索引。

      【讨论】:

        猜你喜欢
        • 2022-07-20
        • 2023-02-11
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        相关资源
        最近更新 更多