重新排列R中的一对订单

时间:2018-04-26 11:45:09

标签: r sorting

我有一个包含10个随机数的列,我希望创建一个新列,为每对配对切换位置,请参阅我的意思示例。你会怎么做?

column    newcolumn
   1         5
   5         1
   7         6
   6         7
   25        67
   67        25
   -10       2
   2         -10
   -50       36
   36        -50

5 个答案:

答案 0 :(得分:2)

利用R在将较小的向量添加到较大向量时复制较小向量的事实,您可以:

a <- data.frame(column=c(1,5,7,6,25,67,-10,2,50,36))
a$newColumn <- a$column[seq(nrow(a)) + c(1, -1)]

答案 1 :(得分:1)

像这样的东西。

a <- data.frame(column=c(1,5,7,6,25,67,-10,2,50,36))
a$newColumn <- 0
a[seq(1,nrow(a),by=2),"newColumn"]<-a[seq(2,nrow(a),by=2),"column"]
a[seq(2,nrow(a),by=2),"newColumn"]<-a[seq(1,nrow(a),by=2),"column"]

# results
   column newColumn
1       1         5
2       5         1
3       7         6
4       6         7
5      25        67
6      67        25
7     -10         2
8       2       -10
9      50        36
10     36        50

答案 2 :(得分:1)

这是一个基础R单行:我们可以将column转换为2 x nrow(df)/2矩阵,交换行,并重铸为向量。

df$newcolumn <- c(matrix(df$column, ncol = nrow(df) / 2)[c(2,1), ]);
#   column newcolumn
#1       1         5
#2       5         1
#3       7         6
#4       6         7
#5      25        67
#6      67        25
#7     -10         2
#8       2       -10
#9     -50        36
#10     36       -50

样本数据

df <- read.table(text =
    "column
   1  
   5  
   7  
   6  
   25
   67
   -10
   2
   -50
   36", header = T)

答案 3 :(得分:1)

另一种选择是使用averev

transform(df, newCol = ave(x = df$column, rep(1:5, each = 2), FUN = rev))
#   column newCol
#1       1      5
#2       5      1
#3       7      6
#4       6      7
#5      25     67
#6      67     25
#7     -10      2
#8       2    -10
#9     -50     36
#10     36    -50

部分rep(1:5, each = 2)为每个rev元素创建一个分组变量(“pair”)。

答案 4 :(得分:0)

这是一种紧凑的方式:

a$new_col <- c(matrix(a$column,2)[2:1,])

#    column new_col
# 1       1       5
# 2       5       1
# 3       7       6
# 4       6       7
# 5      25      67
# 6      67      25
# 7     -10       2
# 8       2     -10
# 9      50      36
# 10     36      50

这个想法是写入一个2行矩阵,切换行,并在向量中展开。