-->

了解顺序()函数了解顺序()函数(Understanding the order() functio

2019-05-09 03:40发布

我想了解如何order()函数的工作。 我是,它返回指数的排列,其排序时,将排序原来矢量的印象。

例如,

> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4

我本来期望此项返回c(2, 3, 1, 4)由于分选的清单将是10 45 50 96。

有人能帮助我理解这个函数的返回值?

Answer 1:

这似乎可以解释它。

的定义ordera[order(a)]为递增次序。 这适用于你的榜样,在正确的顺序是第四,第二,第一,第三则元素。

你可能一直在寻找rank ,返回元素的秩
R> a <- c(4.1, 3.2, 6.1, 3.1)
R> order(a)
[1] 4 2 1 3
R> rank(a)
[1] 3 2 4 1
所以rank会告诉你什么样的顺序号是, order告诉你如何让他们按升序排列。

plot(a, rank(a)/length(a))将得到CDF的曲线图。 要知道为什么order是有用的,但是,尝试plot(a, rank(a)/length(a),type="S")这给出了一个烂摊子,因为数据不是为了增加

如果你没有
oo<-order(a)
plot(a[oo],rank(a[oo])/length(a),type="S")
或者干脆
oo<-order(a)
plot(a[oo],(1:length(a))/length(a)),type="S")
你们得到CDF的线图。

我敢打赌,你想排名的。



Answer 2:

排序一维向量或数据的单个列,只需调用排序功能,并通过在你的序列。

在另一方面, 顺序功能是必要的数据的两个维的数据进行排序-即,在矩阵或数据帧收集的数据的多个列。

Stadium Home Week Qtr Away Off Def Result       Kicker Dist
751     Out  PHI   14   4  NYG PHI NYG   Good      D.Akers   50
491     Out   KC    9   1  OAK OAK  KC   Good S.Janikowski   32
702     Out  OAK   15   4  CLE CLE OAK   Good     P.Dawson   37
571     Out   NE    1   2  OAK OAK  NE Missed S.Janikowski   43
654     Out  NYG   11   2  PHI NYG PHI   Good      J.Feely   26
307     Out  DEN   14   2  BAL DEN BAL   Good       J.Elam   48
492     Out   KC   13   3  DEN  KC DEN   Good      L.Tynes   34
691     Out  NYJ   17   3  BUF NYJ BUF   Good     M.Nugent   25
164     Out  CHI   13   2   GB CHI  GB   Good      R.Gould   25
80      Out  BAL    1   2  IND IND BAL   Good M.Vanderjagt   20

下面是在2008年的NFL赛季场均出手数据的摘录,一个数据帧我已经被称为“FG”。 假设这10个数据点代表所有的尝试,2008年该领域的目标; 进一步假设你想知道的最长射门得分的距离尝试这一年,谁踢它,以及它是否是好还是不好; 你也想知道第二个最长的,还有第三长等; 最后你要在最短的投篮尝试。

那么,你可能只是这样做:

sort(fg$Dist, decreasing=T)

它返回:50 48 43 37 34 32 26 25 25 20

这是正确的,但不是非常有用 - 它告诉我们时间最长的投篮尝试的距离,第二个最长的,...以及最短的; 然而,但这是我们所知道的 - 例如,我们不知道谁起脚是,尝试是否成功,等等。当然,我们需要整理的“DIST”列中的数据框全(换一种说法,我们要排序的所有单个属性DIST上的数据行的,将是这样的:

Stadium Home Week Qtr Away Off Def Result       Kicker Dist
751     Out  PHI   14   4  NYG PHI NYG   Good      D.Akers   50
307     Out  DEN   14   2  BAL DEN BAL   Good       J.Elam   48
571     Out   NE    1   2  OAK OAK  NE Missed S.Janikowski   43
702     Out  OAK   15   4  CLE CLE OAK   Good     P.Dawson   37
492     Out   KC   13   3  DEN  KC DEN   Good      L.Tynes   34
491     Out   KC    9   1  OAK OAK  KC   Good S.Janikowski   32
654     Out  NYG   11   2  PHI NYG PHI   Good      J.Feely   26
691     Out  NYJ   17   3  BUF NYJ BUF   Good     M.Nugent   25
164     Out  CHI   13   2   GB CHI  GB   Good      R.Gould   25
80      Out  BAL    1   2  IND IND BAL   Good M.Vanderjagt   20

这是为了做什么。 它是用于二维数据“排序”; 换一种说法,它返回由行号这样的一维整数索引排序行根据该矢量,会给你在列,DIST正确的面向行排序

下面是它如何工作的。 以上, 排序来的DIST列进行排序; 对DIST列整个数据帧进行排序,我们使用“秩序” 完全相同的方式为“排序”上面使用

ndx = order(fg$Dist, decreasing=T)

(我通常从“订单”将变量“NDX”,它代表“索引”,因为我要使用它作为索引数组进行排序返回的数组结合。)

这是第1步,这里是第2步:

然后“NDX”,什么是“排序”返回作为索引阵列重新排序数据帧,“FG”:

fg_sorted = fg[ndx,]

fg_sorted立即上述重新排序的数据帧。

总之,“排序”用于创建索引阵列(其指定要排序的列的排序顺序),其然后被用作索引阵列重新排序数据帧(或矩阵)。



Answer 3:

(我想这可能是有益的非常简单地在这里奠定了思想总结好材料张贴@doug,与由@duffymo链接; +1到每个,顺便说一句)

?为了告诉你需要将原始载体的元素被放在第一,第二等,使原来的载体进行排序,而?秩告诉你哪些元素具有最低,第二低的,等等,值。 例如:

> a <- c(45, 50, 10, 96)
> order(a)  
[1] 3 1 2 4  
> rank(a)  
[1] 2 3 1 4  

所以order(a)是说,“先放第三个元素,当你排序...”,而rank(a)是说,“第一个元素是第二低的......”。 (请注意,他们都同意其元素是最低等;他们只是呈现的信息是不同的。)因此,我们看到,我们可以使用order()来排序的,但我们不能用rank()这种方式:

> a[order(a)]  
[1] 10 45 50 96  
> sort(a)  
[1] 10 45 50 96  
> a[rank(a)]  
[1] 50 10 45 96  

在一般情况下, order()将不等于rank()除非该载体已经被排序:

> b <- sort(a)  
> order(b)==rank(b)  
[1] TRUE TRUE TRUE TRUE  

此外,由于order()是(基本上)在数据的行列操作,你可以撰写他们在不影响信息,但周围的其他方法产生乱码:

> order(rank(a))==order(a)  
[1] TRUE TRUE TRUE TRUE  
> rank(order(a))==rank(a)  
[1] FALSE FALSE FALSE  TRUE  


Answer 4:

运行该一小段代码让我了解指令功能

x <- c(3, 22, 5, 1, 77)

cbind(
  index=1:length(x),
  rank=rank(x),
  x, 
  order=order(x), 
  sort=sort(x)
)

     index rank  x order sort
[1,]     1    2  3     4    1
[2,]     2    4 22     1    3
[3,]     3    3  5     3    5
[4,]     4    1  1     2   22
[5,]     5    5 77     5   77

参考: http://r.789695.n4.nabble.com/I-don-t-understand-the-order-function-td4664384.html



Answer 5:

这可以帮助你在某个时候。

a <- c(45,50,10,96)
a[order(a)]

你得到的是

[1] 10 45 50 96

我写的代码表示想要“一”作为一个整体的子集“A”,你希望它从最低责令最高值。



Answer 6:

简单地说, order()给出了幅度渐增元件的位置。

例如, order(c(10,20,30))将给予1,2,3order(c(30,20,10))将给予3,2,1。



文章来源: Understanding the order() function
标签: r sorting r-faq