私はデータフレームを持っています。以下はそれからのサンプルデータです。
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
このような要件を簡単に取得する機能はありますか?