繁体   English   中英

在R中重新排列一对的顺序

[英]Rearranging order for a pair in R

我有一列包含10个随机数的列,因此我想创建一个新列,该列已切换每对的位置,请参阅示例以了解我的意思。 你会怎么做?

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

利用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)]

这样的事情。

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

这是一个基本的R 2 x nrow(df)/2 :我们可以将column2 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)

另一种选择是使用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 ERSE的元素。

这是一种紧凑的方式:

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行矩阵中写入,切换行并在向量中展开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM