語言 全排列 函式 巧用R中的各種排名視窗函式

2021-10-12 21:36:34 字數 2217 閱讀 8342

前言

在sql中巧用視窗函式可以解決很多複雜的問題,視窗函式有4種函式型別:排名函式、偏移函式、聚合函式和分布函式,詳細介紹可以瀏覽:

【視窗函式】第一彈:視窗函式簡介

【視窗函式】第二彈:排名函式和偏移函式

【視窗函式】第三彈:聚合函式和分布函式

r語言中,也有與sql中一一對應的4種型別的視窗函式,除了聚合函式有點差異之外,其他3種型別的視窗函式完全一致,而且在r中使用管道函式書寫視窗函式**,比sql中更容易理解。分4部分講一下:排名函式、偏移函式、聚合函式和分布函式,本節介紹一下r語言中的排名函式。

函式對比

sql中排名函式有4個:row_number()、rank()、dense_rank()和ntile(),r語言中也有4個排名函式與之對應,函式名也幾乎相同:

函式使用

資料使用之前的資料:

1 row_number函式

r語言中的row_number函式與sql中的row_number函式相同,對group_by後面字段進行分組,按照order_by後面字段排序,生成乙個連續不重複的編碼,對每個客戶按照購買時間公升序排序編碼:

輸出結果與sql輸出結果有一點不同:r語言中輸出結果的順序與原始資料的順序一致,而sql中是按照購買時間的先後順序輸出的,若想輸出結果與sql中一致,則:

之前說過,使用管道函式連線的語句執行順序和書寫順序一致,上面語句可以理解為:1、使用group_by對指定的user_no欄位分組;2、使用order_by函式對組內資料按照購買時間公升序排列編碼,增加乙個新字段;3、使用arrange對指定的字段user_no和buy_date排序。

2 min_rank函式

r語言中的min_rank函式與sql中的rank函式相同,row_number函式對order_by後面字段相同的記錄編碼是不同的,min_rank就是解決這個問題,對相同的記錄編碼相同:

同樣為了得到與sql中相同的輸出結果,則:

3 dense_rank函式

r語言中的dense_rank函式與sql中的dense_rank函式相同,min_rank編碼出現跳號現象,而dense_rank函式編碼不會跳號:

同樣得到與sql中相同的輸出結果:

4 ntile函式

r語言中的ntile函式與sql中的ntile函式相同,把每一組分成幾塊,塊數由引數n決定:

同樣為了得到與sql中輸出結果一致:

總結

簡單介紹r語言中4個排名視窗函式,函式名幾乎與sql中的4個排名視窗函式一樣(除了min_rank與rank),但r語言的排名視窗函式的輸出結果與sql中的輸出結果有點不同:r語言的資料結果不改變原來的資料順序,而sql中的輸出結果改變了原資料的順序,若想得到與sql中一樣的輸出結果,在r中使用arrange對相應的字段進行排序即可。

STL中的全排列函式實現全排列

標頭檔案 inlcude這裡先說兩個概念 下乙個排列組合 和 上乙個排列組合 對序列 每乙個元素都比後面的小,按照字典序列,固定a之後,a比bc都小,c比b大,它的下乙個序列即為,而的上乙個序列即為,同理可以推出所有的六個序列為 其中沒有上乙個元素,沒有下乙個元素。a.函式模板 next permu...

C 中好用的全排列函式

今天刷到一題需要計算乙個陣列的全排列問題,在幾經周折終於用 實現了,可是後來在閱讀dalao的解題思路是,突然間發現了乙個神奇的函式next permutation 先附上全排列遞迴實現的 includeconst int maxn 11 int n,p maxn hashtable maxn vo...

R語言函式中的字元編碼解析

rstudio有時出現讀取亂碼,在電腦本地開啟又是正常的。這是因為rstudio的編碼顯示問題,可以通過軟體設定來解決。但有時可能會因為rstudio的版本不同,編碼設定的路徑也會有所不同 常見中文格式編碼主要有兩種 gbk gb2312 和utf 8 讀取資料read.csv 或者read.tab...