日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言rank降序_R语言rank函数详细解析

發(fā)布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r语言rank降序_R语言rank函数详细解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.rank函數(shù)是什么

rank相關(guān)文檔[1]可以譯為"返回原數(shù)組(?)中各個元素排序(?)后的秩次(?)",表面上看確實可以得到次序,但對數(shù)組、排序、秩次交待不清。

2.rank函數(shù)使用情景

比如,在100米賽跑中,甲乙丙三人的成績?yōu)?.8s, 8.1s, 7.2s,那么用rank函數(shù)排序獲得名次:

> rank(t

[1] 1 3 2

再如,甲乙丙三人考試得分為74,92,85,用同樣方法取得名次會適得其反。當(dāng)然,我們可以認為執(zhí)行

> rank(-(s

[1] 3 1 2

可以達到目的,但這并未改變rank函數(shù)的排序機制。

3.rank函數(shù)排序類型

rank(x, na.last = TRUE,

ties.method = c("average", "first", "random", "max", "min"))

> t

#同時對相應(yīng)元素做好標(biāo)記

> names(t)

通過以上方法進行排序,得出

Result

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

original

4

NaN

4

7

8

2

NaN

9

9

7

NaN

5

2

2

1

average

5.5

13.0

5.5

8.5

10.0

3.0

14.0

11.5

11.5

8.5

15.0

7.0

3.0

3.0

1.0

first

5

13

6

8

10

2

14

11

12

9

15

7

3

4

1

random (1)

6

13

5

9

10

2

14

11

12

8

15

7

3

4

1

random (2)

5

13

6

8

10

2

14

11

12

9

15

7

4

3

1

max

6

13

6

9

10

4

14

12

12

9

15

7

4

4

1

min

5

13

5

8

10

2

14

11

11

8

15

7

2

2

1

我們發(fā)現(xiàn),標(biāo)簽"b","g","k"的次序并未發(fā)生改變,可推斷ties.method作用在于處理非缺失值的順序。

不妨參考rank的實現(xiàn)代碼

function (x, na.last = TRUE, ties.method = c("average", "first",

"random", "max", "min"))

{

nas

nm

#names函數(shù)暗示了該方法的設(shè)計初衷是對一維數(shù)組即列向量進行排序,雖然x為矩陣也會得出結(jié)果,但nm的作用已經(jīng)失效,結(jié)果不具有意義

ties.method

if (is.factor(x))

x

x

#average\min\max采用了相應(yīng)的.Internal(rank(x, length(x), ties.method)),具體請見[說明2]

#first采用了sort.list(sort.list(x)),具體請見[說明3]

#random采用了sort.list(order(x, stats::runif(sum(!nas)))),具體請見[說明4]

y

length(x), ties.method)), first = sort.list(sort.list(x)),

random = sort.list(order(x, stats::runif(sum(!nas)))))

#下面是補全缺失值的次序的方法

#na.last = "keep",不處理缺失值,na.last = TRUE,后排序缺失值,na.last = FALSE,先排序缺失值。

if (!is.na(na.last) && any(nas)) {

yy

NAkeep

if (NAkeep || na.last) {

yy[!nas]

if (!NAkeep)

yy[nas]

}

else {

len

yy[!nas]

yy[nas]

}

y

names(y)

}

else names(y)

y

}

[說明1] 關(guān)于因子轉(zhuǎn)整數(shù)

> f

> fac

> as.integer(fac)

[1] 3 4 2 1 1 2 3 5 6 6

由此可見: (1) 因子會作為字符串進行機械比較,排出次序。(2) 因子中任意兩個缺失值地位(大小)相同。

實際問題中,因子為人為設(shè)定,故采用有序因子(ordered factor),消除機械轉(zhuǎn)換的干擾。

> qulity

> names(qulity)

> q

> rank(q)

day1 day2 day3 day4 day5 day6 day7

6.0 3.5 6.0 3.5 1.5 6.0 1.5

[說明2]"average", "max", "min" 排序

> t

a b c d e f g h i j k l m n o

4 NaN 4 7 8 2 NaN 9 9 7 NaN 5 2 2 1

> rank(t, na.last = "keep", ties.method = "first")

a b c d e f g h i j k l m n o

5 NA 6 8 10 2 NA 11 12 9 NA 7 3 4 1

> rank(t, na.last = "keep", ties.method = "average")

a b c d e f g h i j k l m n o

5.5 NA 5.5 8.5 10.0 3.0 NA 11.5 11.5 8.5 NA 7.0 3.0 3.0 1.0

可以將"average"排序理解為先對數(shù)據(jù)進行"first"排序,即全部元素都有唯一且不同的次序。

如f, m, n 得分相同,但可按先后次序排成2, 3, 4, 但是f, m, n屬于同一群體,故可以取該群體中的平均水平作為次序,使得分相同的元素地位相當(dāng)。

故不難理解"max"排序是群體中的元素全部取群中最好的水平,這也是普遍采用的“并列排名”方法;

"min"排序是群體中的元素全部取群體中最差的水平,這樣增大了不同等級的順序差異。

[說明3] first = sort.list(sort.list(x))

對序列先按大小排序,大小相同的元素,從頭至尾由小到大排序。

> x

a c d e f h i j l m n o

4 4 7 8 2 9 9 7 5 2 2 1

> sort.list(sort.list(x))

[1] 5 6 8 10 2 11 12 9 7 3 4 1

[說明4]random = sort.list(order(x, stats::runif(sum(!nas))))

weight = stats::runif(sum(!nas)) 為每個已知元素生成0-1之間隨機數(shù),作為“權(quán)重”序列weight

sort.list(order(x, weigth)) 依據(jù)隨機的“權(quán)重”決定得分相同的元素的次序

不妨人為參與權(quán)重設(shè)計

a c d e f h i j l m n o

4 4 7 8 2 9 9 7 5 2 2 1

> weight = c(0.45, 0.55, 0.1, 0.1, 0.1, 0.55, 0.45, 0.1, 0.1, 0.3, 0.1, 0.1);

> sort.list(order(x,weight))

[1] 5 6 8 10 2 12 11 9 7 4 3 1

不難發(fā)現(xiàn),a, c 得分均為4,但w(a) = 0.45 < w(c) = 0.55, 遵照小號在前,a 排在c 前面。h, j 剛好相反w(h) = 0.55 > w(j) = 0.45, j 排在h 前面。

d, j 得分,“權(quán)重”均相同,故按之前從頭到尾遞增順序排列。

f, m, n 得分均為2, w(f) = w(n) = 0.1 < w(m) = 0.3, 排序結(jié)果為f < n < m, 由此可見,“權(quán)重”優(yōu)先于“前后順序”,這樣做使得排序更加隨機化,若序列存在大量得分相同的元素,一定程度克服了“前小后大”規(guī)則的約束,使排序結(jié)果更隨機。

以上僅為說明隨機排序的機制,實際應(yīng)用中只能確定小數(shù)在前大數(shù)在后,并不能解釋相同的數(shù)之間的順序。

4.rank函數(shù)小結(jié)

rank(x, na.last = TRUE,

ties.method = c("average", "first", "random", "max", "min"))

(1) rank 函數(shù)是對一維度數(shù)組、向量x 進行排序。若x 為數(shù)值,則按照小數(shù)在線大數(shù)在后的原則進行排序,若x 為因子,則應(yīng)參考[說明1]進行順序因子設(shè)計。

P.S. 實際情況中,存在大量用二維表格描述的數(shù)據(jù),比如行表示地點列表示時間的統(tǒng)計表,若進行排序,應(yīng)先通過字符拼接的手段將表格轉(zhuǎn)化為一維的向量,否則結(jié)果將失去意義。

(2) rank 將數(shù)據(jù)分為確定值與缺失值兩種。缺失值可按先后排在確定值之間(na.last = FALSE), 也可排在之后(na.last = TRUE), 也可保留,不參與排序(na.last = "keep").

(3) "first" 是最基本的排序,小數(shù)在前大數(shù)在后,相同元素先者在前后者在后。

"max" 是相同元素都取該組中最好的水平,即通常所講的并列排序。

"min" 是相同元素都取該組中最差的水平,可以增大序列的等級差異。

"average" 是相同元素都取該組中的平均水平,該水平可能是個小數(shù)。

"random" 是相同元素隨機編排次序,避免了“先到先得”,“權(quán)重”優(yōu)于“先后順序”的機制增大了隨機的程度。

[1]Returns the sample ranks of the values in a vector. Ties (i.e., equal values) and missing values can be handled in several ways.

總結(jié)

以上是生活随笔為你收集整理的r语言rank降序_R语言rank函数详细解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。