将排名列添加到数据框

mik*_*keL 8 r dataframe

我有一些月度数据,我想在我的数据框中添加一列,将第一列中的最小值与第一列中的最大值相关联.第一列中的第二个最小值到第一列中的第二个最大值,例如......

这是一些示例数据

x1<-c(100,151,109,59,161,104,170,101)
dat<-data.frame(x1)
rownames(dat)<-c('Apr','May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov')

     x1
Apr 100
May 151
Jun 109
Jul  59
Aug 161
Sep 104
Oct 170
Nov 101
Run Code Online (Sandbox Code Playgroud)

我试图让我的数据看起来像这样

     x1   x2
Apr 100  161
May 151  101
Jun 109  104
Jul  59  170
Aug 161  100
Sep 104  109
Oct 170   59
Nov 101  151
Run Code Online (Sandbox Code Playgroud)

我带着等级,排序和顺序进入圈子.任何帮助,将不胜感激.

42-*_*42- 6

如果您创建一个具有升序和降序值配对的临时对象,这是相当简单的:

> temp <- data.frame(asc =x1[order(x1)],desc=x1[rev(order(x1))])
> dat$x2 <- temp$desc[ match(dat$x1, temp$asc) ]
> dat
     x1  x2
Apr 100 161
May 151 101
Jun 109 104
Jul  59 170
Aug 161 100
Sep 104 109
Oct 170  59
Nov 101 151
Run Code Online (Sandbox Code Playgroud)

match函数旨在构造整数索引值,用作"["的参数.这是里面的基本功能merge.