是否可以互相交换两个相邻的行,然后移动到接下来的两行,并将它们各自的行交换在一起?即,第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
答案 0 :(得分:7)
在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
答案 1 :(得分:3)
另一种方法是创建两个序列,一个用于奇数,另一个用于偶数,并将它们交替组合,然后将它们用作行索引。
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
来从两个向量中选择索引。