交换行,每两行
Swap rows, per two rows
是否可以将相邻的两行相互交换,然后移动到下两行,并将它们各自的行交换在一起?即,将第 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
2人一组第一行加1,2人一组第二行减1:
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
另一种方法是创建两个序列,一个用于奇数,一个用于偶数,然后将它们交替组合,然后将它们用作行索引。
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
生成奇数序列。
然后我们使用 rbind
和 c
从两个向量中交替 select 索引。
是否可以将相邻的两行相互交换,然后移动到下两行,并将它们各自的行交换在一起?即,将第 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
2人一组第一行加1,2人一组第二行减1:
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
另一种方法是创建两个序列,一个用于奇数,一个用于偶数,然后将它们交替组合,然后将它们用作行索引。
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
生成奇数序列。
然后我们使用 rbind
和 c
从两个向量中交替 select 索引。