4

私はデータフレームを持っています。以下はそれからのサンプルデータです。

Company     Category    Margin
SBI             BK      34.5
PNB             BK      39.5
UCO BANK        BK      39.9
BANK            BK      41.3
INDIAN BANK     BK      42.3
DENA BANK       BK      44.5
VIJAYA BANK     BK      44.5
UNION BANK      BK      47.6
CENTRAL BANK    BK      49.8
INFOSYS         IT      5.6
HCL TECH        IT      5.9
TCS             IT      6.9
CMC             IT      12.6
TECHMAHINDRA    IT      12.6
COGNIZANT       IT      15.8
IGATE           IT      22.4
WIPRO           IT      22.9
HEXAWARE        IT      34.8
MAHINDRA SATYAM IT      34.8
DR. REDDYS      PH      14.5
SUN PHARMA      PH      19.2
CIPLA           PH      23.9
LUPIN           PH      23.9
DIVIS LABS      PH      29

データ フレームを注意深く見ると、CATEGORY、MARGIN、COMPANY 列で並べ替えられていることがわかります。

ここで、私の要件は、Ranking という新しい列を追加し、CATEGORY のセットごとに 1 から始まるランキングを与えることです。新しいカテゴリがリストに表示されるたびに、ランキングの番号付けは 1 から開始する必要があります。

サンプル出力:

Company     Category    Margin     Ranking
SBI             BK      34.5       1
PNB             BK      39.5       2
UCO BANK        BK      39.9       3 
BANK            BK      41.3       4
INDIAN BANK     BK      42.3       5
DENA BANK       BK      44.5       6
VIJAYA BANK     BK      44.5       7
UNION BANK      BK      47.6       8
CENTRAL BANK    BK      49.8       9
INFOSYS         IT      5.6        1
HCL TECH        IT      5.9        2
TCS             IT      6.9        3
CMC             IT      12.6       4
TECHMAHINDRA    IT      12.6       5
COGNIZANT       IT      15.8       6
IGATE           IT      22.4       7
WIPRO           IT      22.9       8
HEXAWARE        IT      34.8       9
MAHINDRA SATYAM IT      34.8       10
DR. REDDYS      PH      14.5       1
SUN PHARMA      PH      19.2       2
CIPLA           PH      23.9       3
LUPIN           PH      23.9       4
DIVIS LABS      PH      29         5

さらなる要件

完全にジグザグになっている入力データセットを想定します。それで

unique(df$Category)   # gives 5 different category
[1] "BK" "IT" "PH" "MT" "EG"

フォーマット後、同じものが返されます

unique(df$Category)   # gives only 3 categories. rest of 2 categories were deleted.
[1] "BK" "IT" "PH"

注:欠損値をなくすために入力データセットをフォーマットする過程で、いくつかのカテゴリが完全に削除されました。

注:返されたデータフレームには、行名がカテゴリとして含まれている必要があります

データ フレームをランキングした後、ランキングをパラメーターとして関数に渡す関数を書きたいと思います。この関数は、その特定のランキングを持つ各 CATEGORY の Company を含むデータ フレームを返す必要があります。いずれのカテゴリーにおいても、そのような特定のRANKINGを持つCOMPANYが存在しない場合、NAが返されます。

head(companyRanks(3), 4) returns
    COMPANY     CATEGORY
BK  UCO BANK        BK      
IT  TCS             IT      
PH  CIPLA           PH      
MT  <NA>            MT
EG  <NA>            EG

head(companyRanks(10), 4)  # returns:
            COMPANY     CATEGORY
BK             <NA>           BK  # Since there is no company with rank 10 under category BK, NA returned
IT  MAHINDRA SATYAM           IT      
PH             <NA>           PH      
MT             <NA>           MT
EG             <NA>           EG

このような要件を簡単に取得する機能はありますか?

4

1 に答える 1